今天面试,出了这样的一道题,高手能写出来吗! 要求用户输入4个坐标,判断前3个坐标是否可以作为三角形的3个顶点;如果能,同时判断第四个坐标是否在这个三角形内 (不包括在边上和顶点上) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 请用你最熟悉的开发语言按如下需求编写程序 要求用户输入4个坐标,判断前3个坐标是否可以作为三角形的3个顶点;如果能,同时判断第四个坐标是否在这个三角形内 (不包括在边上和顶点上)在平面内考虑问题,判断三个点能否构成三角形的标准:1. 三个点两两不重合;2. 三点不共线。bool IsTriangle(Point2D p1, Point2D p2, Point2D p3); //如果p1, p2, p3能够作为三角形的三个顶点,返回TRUE, 否则返回FALSE。判断第四点是否在三角形内的标准:任取三角形的两顶点确定一直线,第四点都与另一顶点在直线的同侧。intIsInTriangle(Point2D p1, Point2D p2, Point2D p3, Point2D p4); //如果p1, p2, p3不能够作为三角形的三个顶点,返回-1;如果p4在p1, p2, p3构成的三角形内,返回1,如果不在,返回0。可以提取一个公共函数,输入三点,其中前两点不重合,则第一点和第二点确定一条射线,判断第三点在射线的左边,右边还是射线上,并返回不同的代码。int WherePoint(Point2D p1, Point2D p2, Point3D p3); //p1到p2确定一条射线,如果p3在射线上返回0,在射线左边返回1,在射线右边返回-1。如果p1和p2重合返回-2。int WherePoint(Point2D p1, Point2D p2, Point2D p3){double l, l1;if (p1 == p2)return -2;l = (p2[1] - p1[1])/(p2[0] - p1[0]);l1 = (p3[1] - p1[1])/(p3[0] - p1[0]);if (l1 > l)return 1;else if (l1 < l)return -1;else return 0;}bool IsTriangle(Point2D p1, Point2D p2, Point2D p3) {Point2D arrPt[3] = {p1, p2, p3};for (int i = 0; i < 3; i++) {if (arrPt[i%3] == arrPt[(i+1)%3]){return false;} }if (0 == WherePoint(arrPt[0], arrPt[1], arrPt[2]))return false;return true;}int IsInTriangle(Point2D p1, Point2D p2, Point2D p3, Point2D p4){Point2D arrPt[3] = {p1, p2, p3};if (!IsTriangle(p1, p2, p3))return -1;for (int i = 0; i < 3; i++) {if (WherePoint(arrPt[i%3], arrPt[(i+1)%3], arrPt[(i+2)%3]) != WherePoint(arrPt[i%3], arrPt[(i+1)%3], p4)){return 0;} }return 1;}测试数据:pt1 = {0.0, 0.0}; pt2 = {1.0, 0.0}; pt3 = {0.0, 1.0}; pt4 = {0.2, 0.3};pt1 = {0.0, 0.0}; pt2 = {1.0, 0.0}; pt3 = {2.0, 0.0}; pt4 = {0.2, 0.3};pt1 = {0.0, 0.0}; pt2 = {0.0, 0.0}; pt3 = {2.0, 0.0}; pt4 = {0.2, 0.3};pt1 = {0.0, 0.0}; pt2 = {1.0, 0.0}; pt3 = {0.0, 1.0}; pt4 = {-0.2, 0.3};pt1 = {0.0, 0.0}; pt2 = {1.0, 0.0}; pt3 = {0.0, 1.0}; pt4 = {1.0, 0.0};pt1 = {0.0, 0.0}; pt2 = {1.0, 0.0}; pt3 = {0.0, 1.0}; pt4 = {0.5, 0.5}; 支持floatyun()所说的,不过判断三个点的斜率如果不是相等或者是相差180度,就可以构成三角形,判断第四个点时(比如:A,B,C,D),假使A,B,C可以构成三角形,如果A点与D点的斜率在A点与B点和A点与C点之间且B点与D点的斜率小于B点与C点的斜率时,D点才是三角形的点不知道是不是有点麻烦,请多关照[email protected] min_jie(止戈) athlongyj() 二位不是吧,犯了低级错误啊!TO:min_jie(止戈) 三个点肯定在一个平面上,四个点才有可能出现在不同平面,而这个题目的默认情况应该这四个点都在一个平面上。TO:athlongyj() 第四个点到其余三个点的距离并不决定第四个点就一定在三角形内部,例如钝角三角形的最长边外有一点,就可能无法比较。 如何用C#编写基于ASP的公告栏的动态更新?_?高手请进!!!!!!!! 求几个正则表达式和datagridview code 再次发贴求助!timer 变量a = (变量b & 变量c) == 变量d 是什么意思? 怎样实现:C#局域网用户发送消息----------------------??????? 请教这段程序 C#2005 写vsto Excel2003外接程序! 如何获得saveFileDialog的路径。 C#打開foxpro dbf文件問題 C#WINFORM datagridview输入内容验证 关于DataSet 的几个问题 在一个字符串中查找是否存在另一个字符串
{
double l, l1;if (p1 == p2)
return -2;l = (p2[1] - p1[1])/(p2[0] - p1[0]);
l1 = (p3[1] - p1[1])/(p3[0] - p1[0]);if (l1 > l)
return 1;
else if (l1 < l)
return -1;
else
return 0;}bool IsTriangle(Point2D p1, Point2D p2, Point2D p3)
{
Point2D arrPt[3] = {p1, p2, p3};
for (int i = 0; i < 3; i++)
{
if (arrPt[i%3] == arrPt[(i+1)%3])
{
return false;
}
}if (0 == WherePoint(arrPt[0], arrPt[1], arrPt[2]))
return false;return true;
}int IsInTriangle(Point2D p1, Point2D p2, Point2D p3, Point2D p4)
{
Point2D arrPt[3] = {p1, p2, p3};if (!IsTriangle(p1, p2, p3))
return -1;for (int i = 0; i < 3; i++)
{
if (WherePoint(arrPt[i%3], arrPt[(i+1)%3], arrPt[(i+2)%3])
!= WherePoint(arrPt[i%3], arrPt[(i+1)%3], p4))
{
return 0;
}
}return 1;
}测试数据:pt1 = {0.0, 0.0}; pt2 = {1.0, 0.0}; pt3 = {0.0, 1.0}; pt4 = {0.2, 0.3};pt1 = {0.0, 0.0}; pt2 = {1.0, 0.0}; pt3 = {2.0, 0.0}; pt4 = {0.2, 0.3};pt1 = {0.0, 0.0}; pt2 = {0.0, 0.0}; pt3 = {2.0, 0.0}; pt4 = {0.2, 0.3};pt1 = {0.0, 0.0}; pt2 = {1.0, 0.0}; pt3 = {0.0, 1.0}; pt4 = {-0.2, 0.3};pt1 = {0.0, 0.0}; pt2 = {1.0, 0.0}; pt3 = {0.0, 1.0}; pt4 = {1.0, 0.0};pt1 = {0.0, 0.0}; pt2 = {1.0, 0.0}; pt3 = {0.0, 1.0}; pt4 = {0.5, 0.5};
判断第四个点时(比如:A,B,C,D),假使A,B,C可以构成三角形,如果A点与D点的斜率在A点与B点和A点与C点之间
且B点与D点的斜率小于B点与C点的斜率时,D点才是三角形的点
不知道是不是有点麻烦,请多关照
[email protected]
athlongyj() 二位不是吧,犯了低级错误啊!TO:min_jie(止戈)
三个点肯定在一个平面上,四个点才有可能出现在不同平面,而这个题目的默认情况应该这四个点都在一个平面上。
TO:athlongyj()
第四个点到其余三个点的距离并不决定第四个点就一定在三角形内部,例如钝角三角形的最长边外有一点,就可能无法比较。