已知三角型的三个顶点坐标,如何判断另一个点是否落在这个三角型内,本人在线恭候,谢谢。

解决方案 »

  1.   

    我有一个笨办法...
    先用CreatePolygonRgn生成相应的区域...再用PtInRegion判断这个点是不是在这个区域内
      

  2.   

    to kingcom_xu(刀是用来杀人的!):
    我的编译器用不了CreatePolygonRgn函数。
      

  3.   

    sorry...
    在vc\mfc版发的贴我以为是window平台的...
      

  4.   

    #include <afxwin.h>CRgn rgn;
    rgn.CreatePolygonRgn()
      

  5.   

    用三角形面积来判断。原三个顶点p1,p2,p3,新点p.
    如果(s(p,p1,p2)+s(p,p1,p3)+s(p,p3,p2))=s(p1,p2,p3)
    p就在内部
      

  6.   

    不过还是要谢谢kingcom_xu(刀是用来杀人的!)兄的热心的
      

  7.   

    回复人: matrixql(实现梦想) ( ) 信誉:100  
    哈哈,你厉害啊,我写的乱七八糟的,但我可也是原创啊!
      

  8.   

    谢谢  matrixql(实现梦想) 和 nike_ljq(包打听(菜鸟)) 这样的办法我也想过了,太麻烦了,我很想知道有没有更好的办法
      

  9.   

    to  eul(呵呵)兄:
    哪如何判断是不是凸多边形你
      

  10.   

    to  nike_ljq(包打听(菜鸟)) 
    我才是原创:)用凸多边形的方法也挺好。
      

  11.   

    to Phourm():
    能不能告诉大家三角形三点求面积的公式,谢谢
      

  12.   

    先用CreatePolygonRgn生成相应的区域...再用PtInRegion判断这个点是不是在这个区域内a,b,c为三边长p=1/2(a+b+c)
    s=sqrt(p*(p-a)(p-b)(p-c))
      

  13.   

    很简单:
     若点(P)在三角形内,到三个顶点(P1, P2, P3) 的矢量表示为v1(P1-P), v2(P2-P), v3(P3-P), 则v1, v2, v3 之间的角度大于90小于180。假设V1, V2 之间的角度是A,则:
       cos(A)<0 and sin(A)>0 或 cos(A)>0 and sin(A)<0.cos(A)+jsin(A) = exp(jA1 - jA2) = exp(jA1)*exp(-jA2) = (cos(A1) +j sin(A1)) * (cos(A2) - j sin(A2)) = ... + j ...
    A1, A2 是 V1, V2 的角度.
     
    设 V1为 x1, y1 --> 
    cos(A1) = x1 / sqrt(x1*x1 + y1*y1), sin(A1) = y1/sqrt(x1*x1 + y1*y1)
      

  14.   

    补充:
    由于 sqrt(x1*x1 + y1*y1) > 0, 所以以上公式不必使用sqrt(x1*x1 + y1*y1):
      = (x1 + j y1) * (x2 - j y2) = x1*x2 + y1*y2 + j(x2*y1 - x1*y2)
    判断x1*x2 + y1*y2 与 x2*y1 - x1*y2 的符号即可。
      

  15.   

    LetheWater()的解法很有创意,能不能再详细点呢
      

  16.   

    suppose P(px, py), P1(px1, py1), P2(px2, py2), P3(px3, py3),
      以上的 x1 = px1 - px, y1 = py1 - py, 
             x2 = px2 - px, y2 = py2 - py
      

  17.   

    LetheWater():补充:
    由于 sqrt(x1*x1 + y1*y1) > 0, 所以以上公式不必使用sqrt(x1*x1 + y1*y1):
      = (x1 + j y1) * (x2 - j y2) = x1*x2 + y1*y2 + j(x2*y1 - x1*y2)
    判断x1*x2 + y1*y2 与 x2*y1 - x1*y2 的符号即可。x1*x2 + y1*y2 也是大于0的,哪就是说只需要判断x2*y1 - x1*y2 的符合即可,是不是这样的。