mirror of
https://github.com/snowykami/mbcp.git
synced 2024-11-26 08:15:03 +08:00
67 lines
1.5 KiB
Python
67 lines
1.5 KiB
Python
# -*- coding: utf-8 -*-
|
||
"""
|
||
Copyright (C) 2020-2024 LiteyukiStudio. All Rights Reserved
|
||
|
||
@Time : 2024/8/6 下午12:57
|
||
@Author : snowykami
|
||
@Email : snowykami@outlook.com
|
||
@File : line.py
|
||
@Software: PyCharm
|
||
"""
|
||
from typing import overload, TYPE_CHECKING
|
||
|
||
if TYPE_CHECKING:
|
||
from mcpe.mp_math.point import Point3
|
||
from mcpe.mp_math.vector import Vector3
|
||
|
||
|
||
class Line3:
|
||
def __init__(self, a: float, b: float, c: float, d:float):
|
||
"""
|
||
三维空间中的直线。
|
||
:param a:
|
||
:param b:
|
||
:param c:
|
||
:param d:
|
||
"""
|
||
self.a = a
|
||
self.b = b
|
||
self.c = c
|
||
self.d = d
|
||
|
||
def __str__(self):
|
||
return f"Line3({self.a}, {self.b}, {self.c}, {self.d})"
|
||
|
||
def get_perpendicular(self, p: "Point3") -> "Line3":
|
||
"""
|
||
获取直线经过指定点p的垂线。
|
||
:param p: 指定点p,直线外的点
|
||
:return: 垂直于self且过点p的直线
|
||
"""
|
||
a = -self.b
|
||
b = self.a
|
||
c = 0
|
||
d = -(a * p.x + b * p.y + self.c * p.z)
|
||
return Line3(a, b, c, d)
|
||
|
||
def get_intersection(self, l: "Line3") -> "Point3":
|
||
"""
|
||
获取两空间直线的交点。
|
||
:param l: 另一条直线,不平行于self,不共线,且共面
|
||
:return: 交点
|
||
"""
|
||
# 平行检测
|
||
if ...:
|
||
...
|
||
# 共线检测
|
||
if ...:
|
||
...
|
||
# 不共线检测
|
||
if ...:
|
||
...
|
||
|
||
|
||
|
||
|
||
|