要求用户输入4个坐标,判断前3个坐标是否可以作为三角形的3个顶点;如果能,同时判断第四个坐标是否在这个三角形内 (不包括在边上和顶点上)

解决方案 »

  1.   

    请用你最熟悉的开发语言按如下需求编写程序 要求用户输入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};
      

  2.   

    支持floatyun()所说的,不过判断三个点的斜率如果不是相等或者是相差180度,就可以构成三角形,
    判断第四个点时(比如:A,B,C,D),假使A,B,C可以构成三角形,如果A点与D点的斜率在A点与B点和A点与C点之间
    且B点与D点的斜率小于B点与C点的斜率时,D点才是三角形的点
    不知道是不是有点麻烦,请多关照
    [email protected]
      

  3.   

    min_jie(止戈) 
     athlongyj() 二位不是吧,犯了低级错误啊!TO:min_jie(止戈) 
    三个点肯定在一个平面上,四个点才有可能出现在不同平面,而这个题目的默认情况应该这四个点都在一个平面上。
    TO:athlongyj() 
    第四个点到其余三个点的距离并不决定第四个点就一定在三角形内部,例如钝角三角形的最长边外有一点,就可能无法比较。