python 判断点和线段相交

python 判断点和线段相交

import numpy as np
import cv2
import numpy as np

def point_to_line_distance(points, line_segments):
    # line_segments = [[549, 303], [580, 303]]
    # points = [565, 304]

    x0, y0, x1, y1=line_segments[0][0], line_segments[0][1], line_segments[1][0], line_segments[1][1]
    px,py=points[0],points[1]
    """计算点到线段的距离"""
    line_mag = np.sqrt((x1 - x0) ** 2 + (y1 - y0) ** 2)
    if line_mag < 1e-6:
        return np.sqrt((px - x0) ** 2 + (py - y0) ** 2)

    u = ((px - x0) * (x1 - x0) + (py - y0) * (y1 - y0)) / (line_mag ** 2)
    if u < 0.0 or u > 1.0:
        # 最近点在线段外
        ix = min(max(x0, x1), max(min(x0, x1), px))
        iy = min(max(y0, y1), max(min(y0, y1), py))
    else:
        # 最近点在线段上
        ix = x0 + u * (x1 - x0)
        iy = y0 + u * (y1 - y0)

    return np.sqrt((px - ix) ** 2 + (py - iy) ** 2)

def show_dis(line_segments,points):
    # 定义线段和点
    # line_segments = [[584, 284], [645, 279]]
    # points = [612, 317]

    # 创建一个黑色图像
    image = np.zeros((600, 800, 3), dtype=np.uint8)

    start_point = tuple(line_segments[0])
    end_point = tuple(line_segments[1])
    color = (0, 255, 0)  # 绿色
    thickness = 2
    cv2.line(image, start_point, end_point, color, thickness)

    # 绘制点
    center = tuple(points)
    color = (0, 0, 255)  # 红色
    radius = 5
    thickness = -1  # 实心圆
    cv2.circle(image, center, radius, color, thickness)

    # 显示图像
    cv2.imshow('dis', image)
    cv2.waitKey(0)
    # cv2.destroyAllWindows()
if __name__ == '__main__':

    line_segments = [[549, 303], [580, 303]]
    point = [565, 304]

    show_dis(line_segments, point)
    distance = point_to_line_distance(point, line_segments)
    print(f"点 ({point[0]}, {point[1]}) 到线段 的距离: {distance}")

相关推荐

  1. c++ 判断折线 距离

    2024-06-09 21:02:04       32 阅读
  2. 线段树动态开

    2024-06-09 21:02:04       25 阅读
  3. C语言|判断循环相关题目

    2024-06-09 21:02:04       60 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-09 21:02:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-09 21:02:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-09 21:02:04       82 阅读
  4. Python语言-面向对象

    2024-06-09 21:02:04       91 阅读

热门阅读

  1. 基于Golang的AOI算法实现与优化

    2024-06-09 21:02:04       24 阅读
  2. k8s学习--kube-proxy的三种工作模式详细解释

    2024-06-09 21:02:04       28 阅读
  3. openwrt MTK7621关闭硬加速

    2024-06-09 21:02:04       31 阅读
  4. WebScoket scope类型

    2024-06-09 21:02:04       26 阅读
  5. 前端柯里化

    2024-06-09 21:02:04       25 阅读
  6. Apache Spark

    2024-06-09 21:02:04       24 阅读
  7. 关于AD9777芯片的说明以及FPGA控制实现 I

    2024-06-09 21:02:04       29 阅读
  8. 在C++中,NULL和nullptr有什么区别?

    2024-06-09 21:02:04       33 阅读
  9. Android基础-进程间通信

    2024-06-09 21:02:04       29 阅读
  10. Tomcat 启动闪退问题解决方法

    2024-06-09 21:02:04       35 阅读