zoukankan      html  css  js  c++  java
  • 判断一个点是否在三角形内

    转自:https://www.cnblogs.com/simplekinght/p/9218310.html

    面积法:若点P在三角形ABC内,则三角形ABP+三角形ACP+三角形BCP的面积等于三角形ABC

        已知三角形三点坐标ABC,如何求三角形面积呢?

        根据叉乘公式,向量A=(x1,y1) ,向量B=(x2,y2),A x B = x1*y2 - x2*y1

        此时求得的是向量A和向量B的形成的平行四边形的面积,除以2就是三角形的面积了

     1 #include <iostream>
     2 #include <cstring>
     3 #include <queue>
     4 #include <cmath>
     5 #include <cstdio>
     6 #include <algorithm>
     7 using namespace std;
     8 const double eps = 1e-8;
     9 struct point
    10 {
    11     double x,y;
    12 };
    13 double solve(point a,point b,point c)
    14 {
    15     point A;
    16     A.x = b.x-a.x;
    17     A.y = b.y-a.y;
    18     B.x = c.x-a.x;
    19     B.y = c.y-a.y;
    20     return (A.x*B.y-B.x*A.y)/2.0;
    21 }
    22 
    23 int main()
    24 {
    25     point A,B,C,P;
    26     cin>>A.x>>A.y;
    27     cin>>B.x>>B.y;
    28     cin>>C.x>>C.y;
    29     cin>>P.x>>P.y;
    30     double sum = solve(A,B,C);
    31     double k=0;
    32     k + = solve(A,B,P);
    33     k + = solve(B,C,P);
    34     k + = solve(A,C,P);
    35     if((k-sum)>eps) cout<<"在三角形外"<<endl;
    36     else cout<<"在三角形内"<<endl;
    37     return 0;
    38 }
    View Code

     补充一下:

    a=(x1,y1)  b=(x2,y2)

    点积:a*b==x1*x2+y1*y2==|a|*|b|*cos(向量夹角)

    叉积:

    在三维几何中,向量a和向量b的叉乘结果是一个向量,该向量垂直于a和b向量构成的平面。可以通过右手定则判定其方向

    在二维空间中,叉乘还有另外一个几何意义就是:|aXb|等于由向量a和向量b构成的平行四边形的面积。

    具体见------>传送门

    另外还有三种方法见:https://www.cnblogs.com/graphics/archive/2010/08/05/1793393.html#!comments

  • 相关阅读:
    vue指令参考
    jquery easyui 研究(一)Datagrid初始化设置
    HTML之响应协议
    HTTP协议之请求协议
    HTTP协议之HTTP概述
    Day18_函数定义_形参_实参_可变参数
    Day19_名称空间和作用域_函数的嵌套_函数第一类对象的使用_闭包函数
    跳转语句 break 和 continue
    JS中强制类型转换
    toString
  • 原文地址:https://www.cnblogs.com/kongbursi-2292702937/p/11211074.html
Copyright © 2011-2022 走看看