Point2D"角度是怎样的?#34;方法有待理解?

时间:2015-06-18 04:37:27

标签: javafx geometry

我以为我会使用Point2D类来计算e。 G。 2点之间的角度而不是创建实用方法。事实证明,它根本不可用。

代码示例:

Point2D p1;
Point2D p2;

p1 = new Point2D(0, 0);
p2 = new Point2D(10, 10);

System.out.println( "Point2D: " + p1.angle(p2));
System.out.println( "Correct: " + Math.toDegrees(Math.atan2(p2.getY() - p1.getY(),  p2.getX() - p1.getX())));

p1 = new Point2D(1, 1);
p2 = new Point2D(10, 10);

System.out.println( "Point2D: " + p1.angle(p2));
System.out.println( "Correct: " + Math.toDegrees(Math.atan2(p2.getY() - p1.getY(),  p2.getX() - p1.getX())));

导致

Point2D: NaN
Correct: 45.0
Point2D: 0.0
Correct: 45.0

使用Point2D的重点是什么? JavaFX中是否存在可以按预期工作的替代方案,i。即计算2点之间的角度?

2 个答案:

答案 0 :(得分:3)

角度函数返回两个向量之间的角度。例如,如果一个向量是一个向左指向的单位向量而另一个是向上指向的单位向量,那么该角度将是90度。

在第一种情况下,第一个矢量(0,0)没有角度,因此结果为NaN。在第二种情况下,两个矢量的角度都是45度,因此它们之间的角度为零。

要计算两个矢量相对于水平轴的差异的角度,正如您似乎要尝试的那样,从另一个中减去一个并找到它与水平单位矢量之间的角度,例如:< / p>

Point2D p1;
Point2D p2;
Point2D p3;
Point2D p4;

p1 = new Point2D(1, 1);
p2 = new Point2D(10, 10);

p3 = p2.subtract(p1);
p4 = new Point2D(1, 0);

System.out.println( "Point2D: " + p4.angle(p3));

答案 1 :(得分:1)

根据文档,Point2D.angle返回两个向量之间的角度 - 因此,这些点被解释为两个向量的端点(其起源都在(0,0)处)。这就是在(0,0)上使用.angle返回NaN的原因。

如果你想要两点之间的角度,你可以使用(在伪代码中)

(1,0).angle(p2-p1)