判断凸四边形_外积

通过向量外积的正负号可以判断两个向量的相对位置和夹角,进而用于解决如何辨别凸多边形的问题。在四边形ABCD中,计算相邻边的外积,如AB×BC、BC×CD、CD×DA和DA×AB,如果所有外积符号相同,那么该四边形为凸四边形。此方法也可应用于LeetCode的469题。

两个向量的外积定义:

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

a ✖️ b = x1y2-x2y1

https://www.cnblogs.com/xiaojianliu/p/9964246.html

具体参见上面博客。通过外积正负号,可以判定两个向量的相对位置,也就是夹角。

夹角的性质,可以用来解决判别凸多边形,一个点在多边形内等问题。

例如:判别凸多边形:

 向量每个点相连接,假如是多边形ABCD,则得到AB,BC,CD,DA四个向量,分别判定

AB* BC

BC*CD

CD*DA

DA*AB

四个叉乘同不同号,如果同号,证明是凸四边形。leetcode469

class Solution {
public:
    bool isConvex(vector<vector<int>>& points) {
        int n = points.size();
        int xa, ya, xb, yb, xc, yc;
        int prevsign = 0;
        for(int i=0; i<n; i++){
            xa = points[i][0];
            ya = points[i][1];
            xb = points[(i + 1) % n][0];
            yb = points[(i + 1) % n][1];
            xc = points[(i + 2) % n][0];
            yc = points[(i + 2) % n][1];
            int cur = (xc-xb) * (yb-ya) - (yc-yb) * (xb-xa);
            if(prevsign == 0){
                prevsign = cur;
            } else {
                if(prevsign < 0 && cur > 0) return false;
                if(prevsign > 0 && cur < 0) return false;
            }
        }
        return true;
    }
};

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值