C语言平面几何12-向量方法判断线段与矩形是否有交集


向量方法判断线段与矩形是否有交集,通过向量叉乘的结果正负来判断,当矩形在线段的某一侧时,叉乘的结果要么全正,要么全负,此时无交集。

判断有2步:1)快速排斥,2)叉乘。

int RSIntersection(Rectangle r, Point A, Point B)
{
	MBR m1 = (MBR)r;
	MBR m2 = MbrConstruct(A, B);
	// 快速排斥 
	if (MbrOverlap(m1, m2) == 0)
		return 0;
	
	// 判断rectangle的四个点是否在向量的某一侧
	Vector v = VectorConstruct(A, B);
	Vector v1, v2, v3, v4;
	v1.x = r.xmin - A.x;
	v1.y = r.ymin - A.y;
	v2.x = r.xmax - A.x;
	v2.y = r.ymin - A.y;
	v3.x = r.xmax - A.x;
	v3.y = r.ymax - A.y;
	v4.x = r.xmin - A.x;
	v4.y = r.ymax - A.y;
	
	double t1, t2, t3, t4;
	t1 = CrossProduct(v1, v);
	t2 = CrossProduct(v2, v);
	t3 = CrossProduct(v3, v);
	t4 = CrossProduct(v4, v);

	if (t1>0 && t2>0 && t3>0 && t4>0)
		return 0;
	if (t1<0 && t2<0 && t3<0 && t4<0)
		return 0;

	return 1;	
}
函数MbrConstruct,  MbrOverlap, VectorConstruct, CrossProduct见C语言平面几何4-两线段是否相交

判断线段与矩形是否有交集的另外一种方法(降维方法),见 C语言平面几何6-判断线段是否与矩形范围有交集


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值