编程:判断一个点是否在三角形内部

题目描述:

在二维坐标系中,所有的值都是double类型,那么一个三角形可以由3个点来代表,给定3个点代表的三角形,再给定一个点(x, y),判断(x, y)是否在三角形中

题目分析:

方法1:面积法:如果点(x, y)在三角形内部,那么三个小三角形的面积相加等于大三角形面积。

注意:已知三角形三个点,求三角形面积。

方法2:向量法:如果点(x, y)在三角形内部,那么从某个点逆时针出发,点(x, y)都在每条边的左侧。

注意:判断一个点在一个有向边的左侧还是右侧。

#include<iostream>

using namespace std;

double crossProduct(double x1, double y1, double x2, double y2)
{
    return x1 * y2 - x2 * y1;
}

bool isInside(double x1, double y1, double x2, double y2,
              double x3, double y3, double x, double y)
{
    //注意输入点的顺序不一定是逆时针,需要判断一下
    if(crossProduct(x3 - x1, y3 - y1, x2 - x1, y2 - y1) >= 0)
    {
        double tmpx = x2;
        double tmpy = y2;
        x2 = x3;
        y2 = y3;
        x3 = tmpx;
        y3 = tmpy;
    }
    if(crossProduct(x2 - x1, y2 - y1, x - x1, y - y1) < 0) return false;
    if(crossProduct(x3 - x2, y3 - y2, x - x2, y - y2) < 0) return false;
    if(crossProduct(x1 - x3, y1 - y3, x - x3, y - y3) < 0) return false;
    return true;
}

int main()
{
    double x1, y1, x2, y2, x3, y3, x, y;
    cin >> x1 >> y1;
    cin >> x2 >> y2;
    cin >> x3 >> y3;
    cin >> x >> y;
    if(isInside(x1, y1, x2, y2, x3, y3, x, y)) cout << "Yes" << endl;
    else cout << "No" << endl;
    return 0;
}

原文地址:https://www.cnblogs.com/xiaobaizzz/p/12231131.html

时间: 2024-11-08 22:27:19

编程:判断一个点是否在三角形内部的相关文章

判断一个坐标是否在多边形内部

在GIS(地理信息管理系统)中,判断一个坐标是否在多边形内部是个经常要遇到的问题.乍听起来还挺复杂.根据W. Randolph Franklin 提出的PNPoly算法,只需区区几行代码就解决了这个问题. 假设多边形的坐标存放在一个数组里,首先我们需要取得该数组在横坐标和纵坐标的最大值和最小值,根据这四个点算出一个四边型,首先判断目标坐标点是否在这个四边型之内,如果在这个四边型之外,那可以跳过后面较为复杂的计算,直接返回false. if (p.x < minX || p.x > maxX |

编程判断一个树是完全二叉树(使用层次遍历实现)

完全二叉树:一棵具有N个节点的二叉树的结构与满二叉树的前N个节点的结构相同 如何判断一个树是完全二叉树 可以使用层序遍历,只需2个步骤 第一步:如果遍历到一个节点只有右子树没有左子树,则不是完全二叉树 第二部:如果遍历到一个节点只有左子树,那么后面遍历到的节点必须是叶子节点,否则也不是完全二叉树 排除以上两种情况,则树是完全二叉树 核心代码: //层序遍历 int LayerOrder(BiTreeNode *head) { bool flag=0; LQueue Q; Initiate_Que

编程:判断一个点是否在矩形内部

题目描述: 在二维坐标系中,所有的值是double类型,那么一个矩形可以由四个点来代表,(x1, y1)为最左的点,(x2, y2)为最上的点,(x3, y3)为最下的点,(x4, y4)为最右的点. 给定4个点代表的矩形,再给定一个点(x, y),判断(x, y)是否在矩形中 题目分析: 矩形的边平行于坐标轴 此时(x1, y1)为左上角的点,(x2, y2)为右上角的点,(x3, y3)为左下角的点,(x4, y4)为右下角的点.这种情况很好判断. 矩形的边不平行于坐标轴 此时,需要旋转矩形

上机题目(中级)-判断一个点是否在三角形内(Java)

题目如下: 代码如下: package huawei; public final class Demo { public static boolean isInTriangle(POINT A, POINT B, POINT C, POINT P) { double ABC = triAngleArea(A, B, C); double ABp = triAngleArea(A, B, P); double ACp = triAngleArea(A, C, P); double BCp = tr

GMAP 判断一个坐标点是否在不规则多边形内部的算法

在gmap(地理信息管理系统)中,判断一个坐标是否在多边形内部是个经常要遇到的问题.乍听起来还挺复杂.根据W. Randolph Franklin 提出的PNPoly算法,只需区区几行代码就解决了这个问题. 假设多边形的坐标存放在一个数组里,首先我们需要取得该数组在横坐标和纵坐标的最大值和最小值,根据这四个点算出一个四边型,首先判断目标坐标点是否在这个四边型之内,如果在这个四边型之外,那可以跳过后面较为复杂的计算,直接返回false. if (p.x < minX || p.x > maxX

判断一个点是否在多边形内

#转载自:http://blog.csdn.net/u011722133/article/details/52813374 在GIS(地理信息管理系统)/PCL(点云库)中,判断一个坐标是否在多边形内部是个经常要遇到的问题.乍听起来还挺复杂.根据W. Randolph Franklin 提出的PNPoly算法,只需区区几行代码就解决了这个问题 假设多边形的坐标存放在一个数组里,首先我们需要取得该数组在横坐标和纵坐标的最大值和最小值,根据这四个点算出一个四边型,首先判断目标坐标点是否在这个四边型之

判断点在三角形内部

利用叉积,如果点在三角形内部的话,则顺序处理全部边的话,这个点都在边的同一侧,直接用叉积判断 double det(double x1,double y1,double x2,double y2){ return x1*y2-x2*y1; } //x0,y0为需要的检查点,其他点顺时针顺序 bool check(double x0,double y0,double x1,double y1,double x2,double y2,double x3,double y3){ if(det(x0-x

判断一个窗口是否被挂起(发WM_NULL消息,或者调用IsHungAppWindow API进行测试)

判断一个窗口是否被挂起了(就是没有响应了),在多窗口编程了经常会用到,在给别的窗口发消息前,为了目的窗口能确定收到消息,常常在之前先检测窗口是否被挂起了,我们以前常用的方式的是使用下面的方法: [cpp] view plain copy // 判断一个窗口是否已经停止响应了(超时0.5秒) DWORD_PTR dwResult = 0; LRESULT lr = ::SendMessageTimeout(g_hWin, WM_NULL, 0, 0, SMTO_ABORTIFHUNG | SMTO

如何判断一个文本文件内容的编码格式 UTF-8 ? ANSI(GBK)

UTF-8编码的文本文档,有的带有BOM (Byte Order Mark, 字节序标志),即0xEF, 0xBB, 0xBF,有的没有.Windows下的txt文本编辑器在保存UTF-8格式的文本文档时会自动添加BOM到文件头.在判断这类文档时,可以根据文档的前3个字节来进行判断.然而BOM不是必需的,而且也不是推荐的.对不希望UTF-8文档带有BOM的程序会带来兼容性问题,例如Java编译器在编译带有BOM的UTF-8源文件时就会出错.而且BOM去掉了UTF-8一个期望的特性,即是在文本全部