对于每对相邻顶点A、B:构造一个从a到B的向量,称之为p
现在构造一个从a到测试点X的向量,称之为q
向量对的点积公式是p.q=| p | | q | cosC
其中C是向量之间的角度。
所以如果p.q/| p | | q |==1,那么点AX和AB是共线的。在电脑上工作时,你需要1-p.q/| p | | | | | | | | | | | | | | | | | | | |。
还需要检查| q |<;| p |(即X比B更接近A)
如果4&5是真的,你的观点就在边界上。在
编辑
另一种我认为我看到的方法是取你的测试点X,在X上画一条线,垂直于a和B之间的线。找出这条线和a->;B相交的地方。求出从X到这个交叉点的距离,如果这个距离足够小,你就认为这个点在直线上。在
编辑——有趣的小练习!在
发布了一些代码,由于我错误地记住了一些数学。
在回家的火车上在Pythonista玩了一场,然后想出了一个基本上可行的方法。因为在iPad上编辑帖子很痛苦,所以把数学证明放在一边了!在
没有做太多的测试,没有测试除以零等,警告用户。在# we determine the point of intersection X between
# the line between A and B and a line through T
# that is perpendicular to the line AB (can't draw perpendicular
# in ascii, you'll have to i