判断两条线段是否相交以及点是否在四边形内的C++算法

这篇博客介绍了如何用C++实现两个关键的几何算法:判断两条线段是否相交,以及判断一个点是否位于凸四边形内部。线段相交的判断基于边与边的交叉点,而点在四边形内则通过检查点相对于四边形边界边的位置来确定。
摘要由CSDN通过智能技术生成

1.判断两条线段是否相交

#include <iostream>

using namespace std;

struct Point
{
	double x, y;
};

// 判断两条直线是否相交
double determinant(double v1, double v2, double v3, double v4)  // 行列式
{
	return (v1*v4 - v2 * v3);
}

bool intersect(Point aa, Point bb, Point cc, Point dd)
{
	double delta = determinant(bb.x - aa.x, cc.x - dd.x, bb.y - aa.y, cc.y - dd.y);
	if (delta <= (1e-6) && delta >= -(1e-6))  // delta=0,表示两线段重合或平行
	{
		return false;
	}
	double namenda = determinant(cc.x - aa.x, cc.x - dd.x, cc.y - aa.y, cc.y - dd.y) / delta;
	if (namenda > 1 || namenda < 0)
	{
		return false;
	}
	double miu = determinant(bb.x - aa.x, cc.x - aa.x, bb.y - aa.y, cc.y - aa.y) / delta;
	if (miu > 1 || miu < 0)
	{
		return false;
	}
	return true;
}

int main()
{
	Point a1, a2, b1, b2;
// 分别指定两条线段的端点
	a1.x = 1;
	a1.y = 1;
	a2.x = 2;
	a2.y = 2;
	b1.x = 2;
	b1.y = 1;
	b2.x = 3;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值