2012-03-25 59 views
0

这是一个家庭作业问题,但我一直在拖延一段时间,并且一直无法获得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)); 

有什么一清二楚的是,我已经错过了?我沿逆时针方向遍历顶点,因为这是组织的方式。

回答

2

您的代码使用点'one'作为中心点,然后计算'two'和'three'之间的角度。所以,如果你在顶点(0,0),(0,10),(10,0)中放置,你会得到一个90°的角度。实际的计算很好,可以工作,只是你的顶点顺序被搞乱了向上。

+0

在我提交请求后大约15分钟就意识到了这一点!谢谢! – Schroedinger 2012-03-25 06:56:09