一道关于三角形的算法问题

lv1 2005-09-07 08:35:17
输入4个坐标,判断前三个坐标是否能构成一个三角形,如果能构成,再判断第四个坐标是否在该三角内,不包括在线上的点。各位大虾能否告诉我构成三角形的条件是什么,或者能给段程序就最好了
...全文
312 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
jxgzay 2005-09-14
  • 打赏
  • 举报
回复
1、假如4个点为A(X1,Y1)、B(X2,Y2)、C(X3,Y3)、D(X4,Y4)
如果AB的斜率<>BC的斜率,那么ABC构成一个△

if (y2-y1)*(x3-x2)<>(x2-x1)*(y3-y2) then
msgbox "ABC构成一个△!"
end if
2、如果ABC构成三角形,那么△ABC的面积计算公式:

a=sqr((y2-y3)^2+(x2-x3)^2)
b=sqr((y1-y3)^2+(x1-x3)^2)
c=sqr((y2-1)^2+(x2-x1)^2)
p=(a+b+c)/2
S△ABC=sqr(p*(p-a)*(p-b)*(p-c))
同理计算:
S△ABD、S△ADC
IF S△ABD+S△ADC=S△ABC then
MSGBOX "D在△ABC内!"
End If

jxgzay 2005-09-14
  • 打赏
  • 举报
回复
1、假如4个点为A(X1,Y1)、B(X2,Y2)、C(X3,Y3)、D(X4,Y4)
如果AB的斜率<>BC的斜率,那么ABC构成一个△

if (y2-y1)*(x3-x2)<>(x2-x1)*(y3-y2) then
msgbox "ABC构成一个△!"
end if
2、如果ABC构成三角形,那么△ABC的面积计算公式:

a=sqr((y2-y3)^2+(x2-x3)^2)
b=sqr((y1-y3)^2+(x1-x3)^2)
c=sqr((y2-1)^2+(x2-x1)^2)
p=(a+b+c)/2
S△ABC=sqr(p*(p-a)*(p-b)*(p-c))
同理计算:
S△ABD、S△ADC
IF S△ABD+S△ADC=1、假如4个点为A(X1,Y1)、B(X2,Y2)、C(X3,Y3)、D(X4,Y4)
如果AB的斜率<>BC的斜率,那么ABC构成一个△

if (y2-y1)*(x3-x2)<>(x2-x1)*(y3-y2) then
msgbox "ABC构成一个△!"
end if
2、如果ABC构成三角形,那么△ABC的面积计算公式:

a=sqr((y2-y3)^2+(x2-x3)^2)
b=sqr((y1-y3)^2+(x1-x3)^2)
c=sqr((y2-1)^2+(x2-x1)^2)
p=(a+b+c)/2
S△ABC=sqr(p*(p-a)*(p-b)*(p-c))
同理计算:
S△ABD、S△ADC
IF S△ABD+S△ADC=S△ABC then
MSGBOX "D在△ABC内!"
End If


jxgzay 2005-09-14
  • 打赏
  • 举报
回复
1、假如4个点为A(X1,Y1)、B(X2,Y2)、C(X3,Y3)、D(X4,Y4)
如果AB的斜率<>BC的斜率,那么ABC构成一个△

if (y2-y1)*(x3-x2)<>(x2-x1)*(y3-y2) then
msgbox "ABC构成一个△!"
end if
2、如果ABC构成三角形,那么△ABC的面积计算公式:

a=sqr((y2-y3)^2+(x2-x3)^2)
b=sqr((y1-y3)^2+(x1-x3)^2)
c=sqr((y2-1)^2+(x2-x1)^2)
p=(a+b+c)/2
S△ABC=sqr(p*(p-a)*(p-b)*(p-c))
同理计算:
S△ABD、S△ADC
IF S△ABDS+S△ADC=△ABC then
MSGBOX "D在△ABC内!"
End If






S△APB+S△APC<S△ABC 且 S△APB+S△BPC<S△ABC 且 S△BPC+S△APC<S△ABC 则p于ABC内
「已注销」 2005-09-14
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/4264/4264582.xml?temp=.4260065
「已注销」 2005-09-14
  • 打赏
  • 举报
回复
lv1(天下) 我不是说过了么 用等于去计算会有精度问题最终导致误判
比如1。9999888+1。0000111=2。9999999如果你简单的用等号判断则不会等于3
archimedes0 2005-09-13
  • 打赏
  • 举报
回复
支持狼行天下大哥的意见
province_ 2005-09-13
  • 打赏
  • 举报
回复
什么啊?a+b+c=360的话,谁告诉你COSa+cosb+cosc=1成立的?是你的三角函数知识出问题。^_^
province_ 2005-09-11
  • 打赏
  • 举报
回复
从第四点开始向右边画水平线,与三角形的边有一个交点就是在内部了,有大于等于2个或0个就不是在内部。(交点是三角形的角的话也是算成2个点)
lv1 2005-09-11
  • 打赏
  • 举报
回复
不等于1的话就判断点在三角形外面,但是实际做出来时,可能因为余弦的精度或者什么其他原因,一些很明显是在三角形内部的点的余弦之和就是不等于1,不知道是哪里出问题了
lv1 2005-09-11
  • 打赏
  • 举报
回复
我的思路是这样的,如果点在三角形内部,三个顶点与该点之间的三个夹角之和一定是360度,我用余弦定律求出了三个夹角的余弦,如果加起来不等于1的话,也就是不等于cos(360)=1
truewill 2005-09-10
  • 打赏
  • 举报
回复
后面一个问题,应该用斜率来算:

如果D点在ABC内,那么AD的斜率应该有 AB<AD<AC 或 AC<AD<AB
如果AD同时大于或同时小于AB和AC,那么D一定在三角形外

同样计算b点和c点就ok了

(不要告诉我你不会算AD的斜率)
「已注销」 2005-09-08
  • 打赏
  • 举报
回复
如果谁还记得极坐标还可以用极坐标来做效果会更好
「已注销」 2005-09-08
  • 打赏
  • 举报
回复
计算的一般步骤是
1 计算边长
2 用余弦定理计算 cos 既角度
3 用角度计算高度
4 然后计算面积

根据最后判断的条件分类
1 S△APB+S△APC<S△ABC 且 S△APB+S△BPC<S△ABC 且 S△BPC+S△APC<S△ABC 则p于ABC内
2 角PBA<角CBA 角PBC<角ABC.............如此判断顺序正确最多需四次判断
3 求高 计算P与中位线的距离是否小于二分之一的高 换个顶点再判断一共判断三次

简单从步骤数上看用2的精度最高
「已注销」 2005-09-07
  • 打赏
  • 举报
回复
用面积有小数问题可能发生错判
northwolves 2005-09-07
  • 打赏
  • 举报
回复
点P在三角形内部的条件,试试吧

若S△APB+S△APC+S△BPC=S△ABC,且S△APB*S△APC*S△BPC不為0,則P在△ABC內
northwolves 2005-09-07
  • 打赏
  • 举报
回复
Private Type POINTS
x As Integer
y As Integer
End Type

Sub diag(ByVal p1 As POINTS, ByVal p2 As POINTS, ByVal p3 As POINTS, ByVal p4 As POINTS)
Dim betrigle As Boolean
betrigle = Not ((p2.y - p1.y) * (p3.x - p1.x) = (p2.x - p1.x) * (p3.y - p1.y))
If betrigle = False Then '非三角形
Exit Sub
Else
'..... 'p4在三角形内部与否
End If

End Sub
truewill 2005-09-07
  • 打赏
  • 举报
回复
如果三个点不在同一条直线,又不是三角形,
那就只有三点重合的情况了(也算是同一条直线阿)
truewill 2005-09-07
  • 打赏
  • 举报
回复
后一个问题就是那个点和其他三点的连线与三边交点的判断了,还是找本数学书吧
lv1 2005-09-07
  • 打赏
  • 举报
回复
应该不是这么简单吧
truewill 2005-09-07
  • 打赏
  • 举报
回复
-_-|||

如果三个点不在都一条直线,那自然就是三角形了

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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