上一篇 | 下一篇

如何判断一个点是否在一个已知三角形内

发布: 2007-1-25 13:03 | 作者: aougu | 来源: aougu.net | 查看: 533次

原理:奥古多媒体$z[LF-} I2c

~2d&FO1J Hv 要判断的点 point(x,y) 和 原 三个已知坐标的点 组合成不同的三个面 面积加起来,如果这个三个面面积和 与 原来三个已知坐标的点成的面 面积 相等,就表示 点 在 另外三个已知坐标的点组成的三角形之内。
5n N'Q2`"[h9d$p 奥古多媒体UpX`o Z~(D
比如 判断点 o 在 点 a,b,c 之内,那么只要判断奥古多媒体_`C%Q U[n#i A
s oab + s oac + s obc 是否等于 S abc (s 代表面积)
8U.iV:@&L!Pm 奥古多媒体/`-{u/b*G9u o|jN
求三角形面积的函数:奥古多媒体 h!r0JWDA
奥古多媒体`9W(Z R0K!UF&e
1. 算法来源:http://www.director-online.com/accessArticle.cfm?id=1088奥古多媒体XHp+zw4sA

-O&NDZa!e,G*z on returnTriangleArea pointOne, pointTwo, pointThree 奥古多媒体 Pp6@M}^}&b }
奥古多媒体 at#g/RW-\1\et?m Oo
  a = (pointOne.locH - pointThree.locH)
V:GX&[$t(YW   b = (pointOne.locV - pointThree.locV)奥古多媒体Wj)v\@xE i!r
  c = (pointTwo.locH - pointThree.locH)
|]sy Zm5o   d = (pointTwo.locV - pointThree.locV)
#X1OQOr0]   return (0.5 * abs ((a*d) - (b*c)))
g _-u/e\N#}#] 奥古多媒体s8@#\*L3D!t
end
^~7m!q6yf1~RP
WJ?c3o,N+p"W 没有修正值奥古多媒体JLX `Y7\+o.j;i
奥古多媒体&O |Q`+r
2.海伦公式 (爱伊)奥古多媒体.Q"T A{H4_

,j6u*^T*a u on returnTriangleArea pointOne, pointTwo, pointThree
N1T~;Q&t`   a=distance(pointOne,pointTwo)奥古多媒体1?+f(x]5I EcS Z8t8J]O
  b=distance(pointTwo,pointThree)奥古多媒体;N:j&V)V4w7V'ogb
  c=distance(pointThree,pointOne)
5iz-p6Ys l   s=(a+b+c)*0.5 奥古多媒体#^"I}L8aF o#n
  Area=sqrt(s*(s-a)*(s-b)*(s-c)) 奥古多媒体K}r:]N_
  return Area 奥古多媒体 H9t~Ck T3W
end
j-pkU(Td'ooT D
'@*Im? c9N on distance loc1,loc2 奥古多媒体:W&o?]:B'x)f3F7X
  x=loc1[1]-loc2[1]奥古多媒体(Wu\(rt#M5Jk
  y=loc1[2]-loc2[2]
.a ~ K9k2O0[   r=sqrt((x*x+y*y)*1.0)奥古多媒体/@(O)W0l9e2O
  return r
Bzl,rkA)igq#[ end
"~:[(LR_4`&n?,d2t D;L 奥古多媒体{8z4A4q1u

B&G(E7T;@ ^&~ 这种方法,由于用到了浮点数计算出的面积与实际面积,就有可能存在极小的偏差,需要一个修正值! 我试过用0.0000000001测试通过,再多加一个0,就出现误判,即在三角形中有点被误判不在其内!奥古多媒体Z'w4\GL8qTRN
奥古多媒体t!H$?/lp;`B

)AB [N wk1f 程序实现:
k1xm_;xN7u4uB
X&q6cQ@Z.E

:Wa"E:n.C$s 奥古多媒体LU%K4\)x
更多讨论:
6t o5`wW 奥古多媒体fu([rkne5z
http://www.aougu.net/bbs/read.php?topicid=7447

字号: | 推荐给好友

 

评分:0

我来说两句

seccode


最新歌曲
转机 放生 黄玫瑰 摇啊摇 那滋味 擦肩而过 你若成风 幸福一辈子 依然在一起 吻得太逼真 感动天感动地 坐上火车去拉萨 怎么会狠心伤害我
心碎 冲动 小太阳 别碰我 蒲公英 爱情小偷 只要不亏 一定要爱你 等爱的玫瑰 无情的温柔 北极星的眼泪 最后一次的温柔 亲爱的那不是爱情
光荣 火花 下雨天 我可以 樱花草 为你写诗 独家记忆 再见小时候 寂寞才说爱 忘不掉的伤 爱上你是个错 第三者的第三者 孤独的时候可以抱你
假如 城府 是非题 有缘人 舍不得 我的答铃 只欠秋天 外滩十八号 越爱越难过 123木头人 爱走了心碎了 爱上你是我的错 爱情里没有谁对谁错