Java Delaunay三角剖分不正确的角度和边

Java Delaunay三角剖分不正确的角度和边,java,math,geometry,vertex,Java,Math,Geometry,Vertex,对的回答有助于获得两个向量之间的顺时针角度,但我需要知道的是如何从一个特定向量中获得两个向量顺时针方向的角度 这是我想说的一个直观的解释。当从红色矢量沿顺时针方向移动时,顺时针角度如下:(请原谅错误的绘图) 但当从黑色矢量顺时针方向移动时,顺时针角度是: 编辑:我将重新表述我的问题。这就是我想要达到的目标。在生成三角形网格时,我一直遵循这个古老但有用的链接: 对于上面的图像,我总是希望角度从一个特定的向量顺时针方向移动。我一直在使用链接SO答案中的代码来获取角度,但在我的情况下它是不正确的

对的回答有助于获得两个向量之间的顺时针角度,但我需要知道的是如何从一个特定向量中获得两个向量顺时针方向的角度

这是我想说的一个直观的解释。当从红色矢量沿顺时针方向移动时,顺时针角度如下:(请原谅错误的绘图)

但当从黑色矢量顺时针方向移动时,顺时针角度是:

编辑:我将重新表述我的问题。这就是我想要达到的目标。在生成三角形网格时,我一直遵循这个古老但有用的链接:

对于上面的图像,我总是希望角度从一个特定的向量顺时针方向移动。我一直在使用链接SO答案中的代码来获取角度,但在我的情况下它是不正确的

    float dotProd = vx*ux + vy*uy;
    float det = vx*uy - vy*ux;
    float angle = MathUtils.atan2(det, dotProd);//in radians
    if(angle < 0) angle += MathUtils.PI;
float dotProd=vx*ux+vy*uy;
浮点数=vx*uy-vy*ux;
浮动角度=数学atan2(det,dotProd)//弧度
如果(角度<0)角度+=MathUtils.PI;
角度计算不正确,允许连接不必要的边


如何解决这个问题?

我肯定有一个较短的方法可以解决,但如果您知道0,0在哪里 首先检查向量的四分之一,然后进行相应的计算


它会解决你的问题,但从数学上讲,我认为你可以更快地解决问题。

我做了以下实验:

int[] v1={5, 2}, v2={3, 4}, v3={5, 0};
double d1=v1[0]*v2[0]+v1[1]*v2[1], d2=v1[0]*v2[1]-v1[1]*v2[0];
System.out.println(Math.toDegrees(Math.atan2(d2, d1)));
d2=v2[0]*v1[1]-v2[1]*v1[0];
System.out.println(Math.toDegrees(Math.atan2(d2, d1)));
d1=v3[0]*v1[0]+v3[1]*v1[1]; d2=v3[0]*v1[1]-v3[1]*v1[0];
System.out.println(Math.toDegrees(Math.atan2(d2, d1)));
d1=v1[0]*v3[0]+v1[1]*v3[1]; d2=v1[0]*v3[1]-v1[1]*v3[0];
System.out.println(Math.toDegrees(Math.atan2(d2, d1)));
d1=v2[0]*v3[0]+v2[1]*v3[1]; d2=v3[0]*v2[1]-v3[1]*v2[0];
System.out.println(Math.toDegrees(Math.atan2(d2, d1)));
计算的角度似乎是直接角度:如果是正方向,则方向是逆时针方向(例如从v3到v2),如果是负方向,则方向是顺时针方向

我用的是标准java atan2,我不知道你在用什么

因此,要得到时钟方向,你必须检查结果:如果结果为正,则减去360度


你必须自己做实验来确认这个阴性/阳性。

代码是正确的。它会找到旋转第一个(V)矢量使其与第二个(U)矢量共线所需的正方向角度。目前尚不清楚这种方法与您的三角剖分问题有何关系。