向量叉乘与向量点乘

向量点乘

向量叉乘与向量点乘_第1张图片

向量叉乘

向量叉乘与向量点乘_第2张图片
向量叉乘与向量点乘_第3张图片

应用

在C++中,判断某一点是否在三角形内有多种方法,以下是几种常见的实现方式:

向量叉积法

  • 原理:对于三角形ABC和点P,计算向量\overrightarrow{PA}与\overrightarrow{PB}、\overrightarrow{PB}与\overrightarrow{PC}、\overrightarrow{PC}与\overrightarrow{PA}的叉积,若这三个叉积的结果同号(同为顺时针或逆时针),则点P在三角形ABC内。
#include 
#include 

// 计算向量叉积
double crossProduct(std::vector<double>& a, std::vector<double>& b, std::vector<double>& c) {
    return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);
}

// 判断点是否在三角形内
bool isPointInTriangle(std::vector<double>& p, std::vector<double>& a, std::vector<double>& b, std::vector<double>& c) {
    double cp1 = crossProduct(a, b, p);
    double cp2 = crossProduct(b, c, p);
    double cp3 = crossProduct(c, a, p);
    return (cp1 >= 0 && cp2 >= 0 && cp3 >= 0) || (cp1 <= 0 && cp2 <= 0 && cp3 <= 0);
}

int main() {
    std::vector<double> a = {0, 0};
    std::vector<double> b = {1, 0};
    std::vector<double> c = {0, 1};
    std::vector<double> p = {0.2, 0.2};
    std::cout << (isPointInTriangle(p, a, b, c)? "在三角形内" : "不在三角形内") << std::endl;
    return 0;
}
 

你可能感兴趣的:(c++)