计算几何问题

bacmoz 2007-12-04 03:27:21
点集S = {S1, S2, ..., Sn}
A,B∈S, A != B
求P∈S, 使得PAB方向为逆时针, PAB不共线, 且三角形PAB内不包含S中的点
如何设计S的存储结构?

如果有三角剖分的结果就容易了
...全文
134 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
HUNTON 2007-12-06
  • 打赏
  • 举报
回复
定义:平面上的三点P1(x1,y1),P2(x2,y2),P3(x3,y3)的面积量:
S(P1,P2,P3) = (x1-x3)*(y2-y3) - (y1-y3)*(x2-x3)

如果S(P1,P2,P3)< 0,则P1P2P3是顺指针的
如果S(P1,P2,P3)> 0,则P1P2P3是逆指针的
如果S(P1,P2,P3)= 0,则P1P2P3三点共线
kaishui_gu 2007-12-05
  • 打赏
  • 举报
回复
问题的复杂度等价于对“角度”排序的复杂度
tailzhou 2007-12-05
  • 打赏
  • 举报
回复
其实不管怎么预处理,都只能使系数变小,不可能使复杂度低于o(n);

除非对所有可能的ab都预先求解;
tailzhou 2007-12-05
  • 打赏
  • 举报
回复
可以考虑对点按照坐标做索引;
若在 由a,b点组成的矩形框内存在有逆时针的点,则在该矩形内肯定存在有符合条件的p;
若不存在有符合条件的点,扩大矩形的范围;








mathe 2007-12-04
  • 打赏
  • 举报
回复
很简单,顺序保存就可以达到O(n)的算法
首先对于S中每个元素P
计算向量AP×AB(叉乘),得到三角形PAB的有向面积
找到上面计算结果为正而且最小的P就可以了
bacmoz 2007-12-04
  • 打赏
  • 举报
回复
"PAB方向为逆时针", 用来固定P在AB的一侧
bacmoz 2007-12-04
  • 打赏
  • 举报
回复
我的问题在于:
能否设计合适的数据结构, 或采用合适的预处理
得到时间复杂度低于O(n)的算法
tailzhou 2007-12-04
  • 打赏
  • 举报
回复
类似凸包的解法;

大概的计算可以这样;

计算AB的直线;
1)若AB直线与X轴平行,则计算所有的y坐标大于A的y坐标的点(若a的x坐标大于b点的x坐标,则取y坐标小于A的y的点)p,求AB与BP的角的角度;

2)若AB直线与不与X轴平行,则对所有的点p,计算“y=p的y坐标”的直线与AB直线的交点若交点的x坐标<p的x坐标(若a的x坐标大于b点的x坐标,则条件为:交点的x坐标>p的x坐标),则求AB与BP的角的角度;

角度最小且大于0的点既为所求;
若有多个角度相同的点,那么,取这些点中跟b点最近的那个点;
medie2005 2007-12-04
  • 打赏
  • 举报
回复
"PAB方向为逆时针"什么意思?

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧