求解一道平面几何题,不很难

vc_hunter 2005-09-15 05:18:59
我想知道有没有比较优秀的算法。
给出4个点,求第4个点是否在前3个点围成的3角形里(假设前3个点能围成三角形)
...全文
214 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
vc_hunter 2005-09-17
  • 打赏
  • 举报
回复
我乱写的,不知道对不对
vc_hunter 2005-09-17
  • 打赏
  • 举报
回复
double GetSlope(int x1,int y1,int x2,int y2)//得到2点构成的边的斜率
{
double x=abs(x1-x2);
double y=abs(y1-y2);
return y/x;
}
void main()
{
POINT a,b,c,d;//4个点的坐标
scanf("%d,%d",&a.x,&a.y);//输入各点坐标
scanf("%d,%d",&b.x,&b.y);
scanf("%d,%d",&c.x,&c.y);
scanf("%d,%d",&d.x,&d.y);
double ab=GetSlope(a.x,a.y,b.x,b.y);//计算各边斜率
double bc=GetSlope(b.x,b.y,c.x,c.y);
double ca=GetSlope(c.x,c.y,a.x,a.y);
if(ab==bc||bc==ac||ab==ac)//判断3边是否能构成3角形
{
printf("此3点不能构成三角形");
return;
}
double ad=GetSlope(a.x,a.y,d.x,d.y);//计算某点过第4点的斜率
double bd=GetSlope(b.x,b.y,d.x,d.y);
bool ret=1;
if(ab>ca) //通过斜率判断点是否在三角形内
if(ad<=ca||ad>=ab)
ret=0;
else
if(ad>=ca||ad<=ab)
ret=0;
if(bc>ab)
if(bd>=bc)
ret=0;
else
if(bd<=bc)
ret=0;
if(ret)
printf("第4点x:%d,y:%d在三角形a,b,c内",d.x,d.y);
else
printf("第4点x:%d,y:%d不在三角形a,b,c内",d.x,d.y);

}
xindongdong 2005-09-17
  • 打赏
  • 举报
回复
设有p1,p2,p3,p4点,如果向量p4p1和p4p2的夹角a, p4p2和p4p3的夹角b, p4p3和p4p1的夹角c之和为360度,那么p4点在三角形p1p2p3内。
syy64 2005-09-16
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=198803
Kvci 2005-09-16
  • 打赏
  • 举报
回复
再在比较面积大小的时候对于p1、P2、P3形成的三角形
以及P4与其中任意两点所形成的三角形是有一条公共边的
也就是说可以只要计算两个不同点到公共边的高的大小即可。
因为底相同,高越大的面积越大。
HUNTON 2005-09-16
  • 打赏
  • 举报
回复
问题:如何判断一点是否在一个凸多边形的内部

定义:已知三点A(x1,y1)、B(x2,y2)、C(x3,y3)

|x1 x2 x3|
则S(A,B,C) =abs( |y1 y2 y3| )= (x1-x3)*(y2-y3) - (y1-y3)(x2-x3)
|1 1 1 |
解决:
设要判断的点为P,凸多边形为A1A2A3、、、An(顺时针或逆时针都可以),
首先计算S = S(A1,A2,A3) + S(A1,A3,A4) + 、、、+S(A1,An-1,An)

然后计算SS = S(P,A1,A2) + S(P,A2,A3) + 、、、+ S(P,An,A1)
最后判断S与SS的关系,
若S=SS,则P在该凸多边形的边上或内部
P在第i边上的附加条件是S(P,Ai,Ai+1)=0
若S<SS,则P在该凸多边形的外部
S>SS的情况是不存在的。

三角形也是凸多边形,所以用上面的方法就可以了
Kvci 2005-09-15
  • 打赏
  • 举报
回复
哈哈
殊途同归
和楼上道理一样
Kvci 2005-09-15
  • 打赏
  • 举报
回复
还一个笨办法
就是如果P4在三角形内
那p4与前三点中任意两点形成的三角形的面积都不会大于p1、p2、p3所形成的三角形的面积
如果有某两点与P4形成的三角形面积大于p1、p2、p3所形成的三角形的面积,那P4就肯定在p1、p2、p3所形成的三角形之外。
那也就是求四个三角形的面积
以及他们之间的大小关系
已知三点坐标求三角形面积的公式不难吧
超级大笨狼 2005-09-15
  • 打赏
  • 举报
回复
偶认为:只要4个点是一个凸多边形,就能证明那点在外边。
证明是凸多边形,要证明选3个点组成的三角形面积相加相等。
ABCD=ABC+BCD=ACD+BCD
此题关键是计算三角型面积。

面积公式我忘记了。好像是:(|(x1-x2)(y1-y2)|+|(x1-x3)(y1-y3)|+|(x2-x3)(y2-y3)|)/2
谁能想起来帮我写在这里。
寻开心 2005-09-15
  • 打赏
  • 举报
回复
只要解决一个点在直线哪一侧的功能就可以了
假定四个点是 P1 P2 P3 P4
检测P4是否在P1P2, P2P3, P3P1 这三条有方向的直线的同一侧(左或者右侧)就可以了
如果在同一侧,必然在三角形内,否则在外

点在直线哪一侧很好判断, 以P1P2直线为例子,
判断:
(p2.x-p1.x)*(p4.y-p1.y) - (p2.y-p1.y)*(p4.x-p1.x)
这个表达式的符号就可以了

33,028

社区成员

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

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