检查点是否在圆形扇区中

拉格斯

我发现这个问题涉及相同的问题。提供的答案有效,但是对于我的情况,我需要对其稍作更改。以下是我回答的答案:

double theta = Math.atan2(pointerY - height / 2, pointerX - width / 2);

if(theta<0)
    theta = Math.PI - theta;
int whichSlice = 0;
double sliceSize = Math.PI*2 / 4;
double sliceStart;

for(int i=1; i<=4; i++) {
    sliceStart = i*sliceSize;
    if(theta < sliceStart) {
        whichSlice = i;
        break;
    }
}

就我而言,我需要将象限旋转45度。下面是一个例子;红色是这段代码的作用,而绿色是我想要的:

在此处输入图片说明

我尝试了各种代码更改,但仍然无法弄清楚。

迪恩·莱特斯多夫(Dean Leitersdorf)

编辑:

首先,在它自己的绝望JComponent中创建您的圈子,并添加它自己的侦听器-基本上为此圈子创建一个类,使圈子本身接收鼠标事件,并确保该圈子占据JCOMPONENT的整个矩形-它必须触摸所有边缘(我将使用this.getHeight(),它必须返回圆的边界框的高度)!!!

下面的固定代码除了支持向下增加的y轴外,还支持以下情况:

第1步:检查我们是否在圈子内。步骤2:检查我们是否在对角线的上方/下方(注意:对角线的方程为y = x,而y = -x)

Point pointWeAreChecking;
Point centerOfCircle;
double radius;




if(Math.pow(Math.pow(pointWeAreChecking.x-centerOfCircle.x , 2) + Math.pow(pointWeAreChecking.y-centerOfCircle.y , 2), 0.5) <= radius)
{
//Means we are in circle.
if(pointWeAreChecking.y>pointWeAreChecking.x)
{
//Means it is either in 2 or 3 (it is below y = -x line)
if(pointWeAreChecking.y>-pointWeAreChecking.x + this.getHeight()){
//We are in 2.
}else
{
//We are in 3.    
}
}else
{
if(pointWeAreChecking.y>-pointWeAreChecking.x + this.getHeight())
{
//We are in 4.
}else
{
//We are in 2.
}
}

 }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章