简单2D几何求交点

本文介绍了2D图形SVG工具中如何实现交点检测功能,包括线段与线段、圆与圆、线段与圆的交点计算。通过对各种几何形状的交点情况进行分析,简化问题并提供相应的算法实现。
摘要由CSDN通过智能技术生成

2D图形SVG工具添加了通过选项属性显示交点的功能。

PaladinDu:2D图形SVG化工具0 赞同 · 0 评论文章

在这个工具中,已经定义的数据结构有点,线段,有向线段,射线,直线,多边形,和圆。

其中点不参与交点检测;

线段,有向线段,射线,直线本质都是线段;

多边形由多个线段组成;

所以求交点的问题被减少为:

1.线段与线段;2.圆与圆;3.线段与圆求交点的问题。

线段与线段求交点

两个线段之间的关系可以分为以下几种:

不相交,相交且交点为端点,一般相交,相交且平行

由于工具默认显示线段的端点,对于 相交且平行 和 相交且交点为端点 的情况不在添加交点。

这样就只需要处理完全相交的情况,问题变得简单了许多。

这里用到的算法也比较简单,代码与流程解析如下:

class LineSegment:
    def __init__(self,start:Position,end:Position):
        self.start = start
        self.end = end    

    def is_collision(self,other):  # 通过叉乘检测两个线段是否都满足端点在另一个线段的两侧
        self_dir = self.end.reduce(self.start)
        if self_dir.cross(other.start.reduce(self.start)) * self_dir.cross(other.e
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值