前几天面试的时候被问到了,如何随机在三角形内生成点,我按照我的想法回答了一遍,但觉得回答的不够好。最后面试官说了一个最优的方法。觉得不错,顺带总结一下最近看到的一些关于计算机图形学方面的经典小题,知乎上看到的还有Leetcode上的
1.判断一个点是否在多边形内
首先先说一下输入的内容,多边形的顶点是一个数组输入进来,其中每个相邻点之间对应着多边形上有边相连
POINT p1 = ptPolygon[i];
POINT p2 = ptPolygon[(i + 1) % nCount];
即上面两个点之间存在边相连
判断是否在凸多边形内部
这个方法我记得是在编程之美上看到的,即计算该点与多边形点之间向量的叉积,如果叉积同向则说明在内部,如果有反向则说明在外部。
比如上面这个图,分别计算 PA→,PB→ 的叉积 PB,PC→ 的叉积 PC→,