这是一个家庭作业的问题,但我已经玩了一段时间,并没有得到100%准确的答案。给定一个多边形,我必须找到该多边形内任意随机顶点的内角。我一直在做的是先把顶点和它后面的顶点然后计算入射角(比如我把我的顶点视为B),然后我把边缘AB和BC做成,然后找出每个的大小,然后除两者的点积乘以各自的大小。
我仍然不在,特别是在我有矢量(0,10),(0,0),(10,0)的情况下。显然,中间矢量的内角是90度,但是当我使用幅度和点积计算它时,由于一些奇怪的原因我得到45度。
这是我的代码
double dx21 = one.x - two.x;
double dx31 = one.x - three.x;
double dy21 = one.y - two.y;
double dy31 = one.y - three.y;
double m12 = Math.sqrt(dx21*dx21 + dy21*dy21);
double m13 = Math.sqrt(dx31*dx31 + dy31*dy31);
double theta = Math.acos((dx21*dx31 + dy21*dy31)/ (m12 * m13));
System.out.println(theta);
System.out.println(Math.toDegrees(theta));
我错过了什么令人眼花缭乱的明显事件?我正在逆时针遍历顶点,因为这就是集合的组织方式。
答案 0 :(得分:2)
您的代码使用点“一”作为中心点,然后计算“两个”和“三个”之间的角度。所以,如果你把它放在顶点(0,0),(0,10),(10,0)中,你会得到一个90°的角度。实际计算很好并且有效,你只需要你的顶点顺序搞砸了起来。