Java 检查点是否在圆形扇区中

Java 检查点是否在圆形扇区中,java,math,Java,Math,我发现这与同样的问题有关。提供的答案有效,但我需要根据我的情况稍微修改一下。以下是我的答案: 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;

我发现这与同样的问题有关。提供的答案有效,但我需要根据我的情况稍微修改一下。以下是我的答案:

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;
    }
}
double theta=Math.atan2(pointerY-height/2,pointerX-width/2);
如果(θ编辑:

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

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

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

pointWeAreChecking;
圆的点中心;
双半径;
if(Math.pow(Math.pow(pointWeAreChecking.x-centerof circle.x,2)+Math.pow(pointWeAreChecking.y-centerof circle.y,2),0.5)pointWeAreChecking.x)
{
//表示它在2或3中(在y=-x线以下)
if(pointWeAreChecking.y>-pointWeAreChecking.x+this.getHeight()){
//我们在2号楼。
}否则
{
//我们在3号楼。
}
}否则
{
if(pointWeAreChecking.y>-pointWeAreChecking.x+this.getHeight())
{
//我们在4楼。
}否则
{
//我们在2号楼。
}
}
}

但这只适用于四个象限,如果它们正好旋转45度。这不是你想要的吗?基本方法:步骤1-测试是否在圆内。2-使用直线方程(可以是任意角度旋转,任意直线)你是对的。上面的答案只适用于一个正常的xy平面——一个以圆的原点为中心,y向上增加的平面(不像java).为了能够创建适用于您的情况的代码,我们应该首先将您创建的圆对象隔离到它自己的图形平面中,然后分析向下增加的y轴的命中坐标(如java中)。我将在明天查看此内容。对不起,刚到家。是的,提供的代码完全符合我的需要。谢谢!您可能需要将
theta
与两个值进行比较:切片的起始角度和切片的结束角度。然后查看
theta
是否介于两个值之间。如果是,则它位于切片中。如果不是,则转到下一个角度。
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.
}
}

 }