难,C++高手请进!!!

hewittlee 2005-10-30 03:22:43
要求用户输入4个坐标,判断前3个坐标是否可以作为三角形的3个顶点;如果能,同时判断第四个坐标是否在这个三角形内 (不包括在边上和顶点上) 。
我想问怎样判断第四个坐标是否在这个三角形内?
...全文
713 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
明天去抢劫 2006-03-03
  • 打赏
  • 举报
回复
两边之和大于第三边
Jinhao 2006-03-03
  • 打赏
  • 举报
回复
template<int X, int Y> struct point
{
static const int x = X;
static const int y = Y;
};

template<typename _Point1, typename _Point2, typename _Point3>
struct is_in_a_line
{
static const int value = ((_Point3::y - _Point1::y)*(_Point2::x - _Point1::x)
==
(_Point3::x - _Point1::x)*(_Point2::y - _Point1::y));
};

template<typename _Point1, typename _Point2, typename _Point3>
class fun
{
static const int mid = (_Point1::x - _Point3::x)*(_Point2::y - _Point3::y)
-
(_Point1::y - _Point3::y)*(_Point2::x - _Point3::x);
public:
static const int value = mid < 0 ? -mid: mid;
};

int main()
{
typedef point<10, 10> p1;
typedef point<20, 25> p2;
typedef point<30, 30> p3;
typedef point<20, 21> p4;

if(is_in_a_line<p1, p2, p3>::value)
cout<<"前三点在一条直线上"<<endl;
else
if(fun<p1, p2, p3>::value
==
fun<p1, p2, p4>::value + fun<p1, p3, p4>::value + fun<p2, p3, p4>::value
)
cout<<"P4在三角形内"<<endl;
else
cout<<"P4不在三角形内"<<endl;

}
xdspower 2005-11-02
  • 打赏
  • 举报
回复
如果是平面问题,应该是不太难的,happy__888([顾问团]寻开心)的方法很适用。
如果是三维空间问题,判断是否是三角形还是不太难,因为如果不能构成三角形,三个点在每个维面的正投影都在一条直线上(或是一个点),问题2就像NowCan(城市浪人) 说的要定义什么是“一个点在一个三角形内”才行
NowCan 2005-11-01
  • 打赏
  • 举报
回复
三维空间的话需要定义什么是“一个点在一个三角形内”才行。
codearts 2005-10-31
  • 打赏
  • 举报
回复
前段时间我找到的资料:《计算几何常用算法概览》

http://www.frontfree.net/view/article_748.html

寻开心 2005-10-31
  • 打赏
  • 举报
回复
计算三角形的面积公式

三角形的三个顶点 x1,y1, x2,y2, x3,y3
那么面积就是:

s = fabs (0.5 * ( ( x1*y2 -x2*y1 ) + (x2*y3-x3*y2) + (x3*y1-x1*y3) ) )

关于第一个问题: 如果面积是0,就不能构成三角形,否则就可以。
关于第二个问题: 如果前三个点构成的三角形面积,等于这个三角形的三个边和第四个点构成的三个三角形面积的和,那么第四点就在内,否则就在外。

Poptang 2005-10-31
  • 打赏
  • 举报
回复
abs((a.x-c.x)*(b.y-c.y)-(a.y-c.y)*(b.x-c.x))*0.5
这个不太明白。。
ncshow 2005-10-31
  • 打赏
  • 举报
回复
to:llf_hust()
果然是好方法
thomasnew 2005-10-31
  • 打赏
  • 举报
回复
如果是三维空间的坐标呢
llf_hust 2005-10-31
  • 打赏
  • 举报
回复
其实就是数学知识呀
skiny 2005-10-30
  • 打赏
  • 举报
回复
to:llf_hust()
能否劳驾解释一下;
longlongago8 2005-10-30
  • 打赏
  • 举报
回复
就是一个数学问题
gxllzp 2005-10-30
  • 打赏
  • 举报
回复
解析几何问题,
这不是最好的算法,
等待……
wzjall 2005-10-30
  • 打赏
  • 举报
回复
楼上真不错,经常能看到你的代码.
llf_hust 2005-10-30
  • 打赏
  • 举报
回复
#include<iostream>
#include<cmath>
using namespace std;
class iter
{
public:
int x;
int y;
};
double fun(iter&a,iter&b,iter&c)
{
return abs((a.x-c.x)*(b.y-c.y)-(a.y-c.y)*(b.x-c.x))*0.5;
}
int main()
{
iter s1,s2,s3,s4;
cin>>s1.x>>s1.y;
cin>>s2.x>>s2.y;
cin>>s3.x>>s3.y;
cin>>s4.x>>s4.y;
if((s3.y-s1.y)*(s2.x-s1.x)==(s3.x-s1.x)*(s2.y-s1.y))
{
cout<<"s1,s2,s3在一条直线上"<<endl;
return 0;
}
if(fun(s1,s2,s3)==fun(s1,s2,s4)+fun(s1,s3,s4)+fun(s2,s3,s4))
{
cout<<"s4位于s1,s2s,s3组成的三角行内"<<endl;
}
else cout<<"s4不位于s1,s2s,s3组成的三角行内"<<endl;
return 0;
}
0黄瓜0 2005-10-30
  • 打赏
  • 举报
回复
点在三角形内,则有该点与另三点中的任两点组成的三角形(共三个)的面积和与阮三角形相等,否则必远三角形大。

这个比较好编程
==========================================================
第一个原写为阮,第二个原写作远,哪个读不猜三秒?
hunter0912 2005-10-30
  • 打赏
  • 举报
回复
点在三角形内,则有该点与另三点中的任两点组成的三角形(共三个)的面积和与阮三角形相等,否则必远三角形大。

这个比较好编程
hkbpro 2005-10-30
  • 打赏
  • 举报
回复
对于任意三角形ABC,分别判断点P是不是跟点C在边AB的同侧,P是不是跟点B在边AC的同侧点,P是不是跟点A在边BC的同侧,都是,那就是在三角形内
chunhai12 2005-10-30
  • 打赏
  • 举报
回复
汗,纯算法问题,和C++有啥关系

判断顶点是否在某个三角形内就连3个顶点,算夹角和

33,008

社区成员

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

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