mirror of
https://github.com/snowykami/mbcp.git
synced 2025-08-02 19:49:58 +00:00
🐛 fix line.cal_intersection
This commit is contained in:
35
tests/test_angle.py
Normal file
35
tests/test_angle.py
Normal file
@ -0,0 +1,35 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Copyright (C) 2020-2024 LiteyukiStudio. All Rights Reserved
|
||||
|
||||
@Time : 2024/8/28 上午3:16
|
||||
@Author : snowykami
|
||||
@Email : snowykami@outlook.com
|
||||
@File : test_angle.py
|
||||
@Software: PyCharm
|
||||
"""
|
||||
from mbcp.mp_math.angle import AnyAngle
|
||||
from mbcp.mp_math.const import PI
|
||||
from tests.answer import output_ans
|
||||
|
||||
|
||||
class TestAngle:
|
||||
def test_radian_to_degree(self):
|
||||
angle = AnyAngle(1, is_radian=True)
|
||||
output_ans(180 / PI, angle.degree, question="弧度转角度1")
|
||||
|
||||
angle = AnyAngle(2, is_radian=True)
|
||||
output_ans(360 / PI, angle.degree, question="弧度转角度2")
|
||||
|
||||
angle = AnyAngle(PI, is_radian=True)
|
||||
output_ans(180, angle.degree, question="弧度转角度3")
|
||||
|
||||
def test_degree_to_radian(self):
|
||||
angle = AnyAngle(180)
|
||||
output_ans(PI, angle.radian, question="角度转弧度1")
|
||||
|
||||
angle = AnyAngle(360)
|
||||
output_ans(2 * PI, angle.radian, question="角度转弧度2")
|
||||
|
||||
angle = AnyAngle(90)
|
||||
output_ans(PI / 2, angle.radian, question="角度转弧度3")
|
@ -10,7 +10,12 @@ Copyright (C) 2020-2024 LiteyukiStudio. All Rights Reserved
|
||||
"""
|
||||
import logging
|
||||
|
||||
from liteyuki import logger # type: ignore
|
||||
|
||||
from mbcp.mp_math.angle import AnyAngle
|
||||
from mbcp.mp_math.const import PI
|
||||
from mbcp.mp_math.point import Point3
|
||||
from mbcp.mp_math.utils import approx
|
||||
from mbcp.mp_math.vector import Vector3
|
||||
from mbcp.mp_math.line import Line3
|
||||
from tests.answer import output_ans
|
||||
@ -18,6 +23,68 @@ from tests.answer import output_ans
|
||||
|
||||
class TestLine3:
|
||||
|
||||
def test_cal_angle(self) -> None:
|
||||
"""
|
||||
计算两条直线的夹角
|
||||
"""
|
||||
"""测试样例们"""
|
||||
samples: tuple[tuple[Line3, Line3, AnyAngle], ...] = (
|
||||
(
|
||||
Line3(Point3(0, 0, 0), Vector3(1, 1, 0)),
|
||||
Line3(Point3(0, 0, 0), Vector3(1, 0, 0)),
|
||||
AnyAngle(45)
|
||||
),
|
||||
(
|
||||
Line3(Point3(0, 0, 0), Vector3(0, 1, 0)),
|
||||
Line3(Point3(0, 0, 0), Vector3(1, 0, 0)),
|
||||
AnyAngle(90)
|
||||
)
|
||||
)
|
||||
|
||||
for sample in samples:
|
||||
correct_ans = sample[2]
|
||||
actual_ans = sample[0].cal_angle(sample[1])
|
||||
output_ans(correct_ans, actual_ans, question="计算两条直线的夹角")
|
||||
assert correct_ans == actual_ans
|
||||
|
||||
def test_cal_distance(self) -> None:
|
||||
"""
|
||||
计算两条直线的距离
|
||||
"""
|
||||
"""测试样例们"""
|
||||
samples: tuple[tuple[Line3, Line3, float], ...] = (
|
||||
( # 重合
|
||||
Line3(Point3(0, 0, 0), Vector3(1, 1, 1)),
|
||||
Line3(Point3(0, 0, 0), Vector3(2, 2, 2)),
|
||||
0
|
||||
),
|
||||
( # 两条直线相交
|
||||
Line3(Point3(0, 0, 0), Vector3(1, 1, 0)),
|
||||
Line3(Point3(0, 0, 0), Vector3(1, 0, 0)),
|
||||
0
|
||||
),
|
||||
( # 平行线
|
||||
Line3.from_two_points(Point3(0, 0, 0), Point3(1, 1, 0)),
|
||||
Line3.from_two_points(Point3(0, 0, 1), Point3(1, 1, 1)),
|
||||
1
|
||||
),
|
||||
( # 异面
|
||||
Line3.from_two_points(Point3(0, 0, 0), Point3(1, 1, 0)),
|
||||
Line3.from_two_points(Point3(1, 0, 2), Point3(0, 1, 2)),
|
||||
2
|
||||
),
|
||||
( # 异面2
|
||||
Line3.from_two_points(Point3(1, 0, 1), Point3(2, 1 ,0)),
|
||||
Line3.from_two_points(Point3(1, 2, 0), Point3(0, 1, 1)),
|
||||
2 ** 0.5
|
||||
)
|
||||
)
|
||||
|
||||
for sample in samples:
|
||||
correct_ans = sample[2]
|
||||
actual_ans = sample[0].cal_distance(sample[1])
|
||||
output_ans(correct_ans, actual_ans,approx(correct_ans, actual_ans), question="计算两条直线的距离")
|
||||
|
||||
def test_equal(self):
|
||||
line1 = Line3(Point3(1, 1, 1), Vector3(1, 1, 1))
|
||||
line2 = Line3(Point3(1, 1, 1), Vector3(2, 2, 2))
|
||||
@ -25,7 +92,7 @@ class TestLine3:
|
||||
|
||||
# 反例
|
||||
line1 = Line3(Point3(1, 1, 1), Vector3(1, 1, 1))
|
||||
line2 = Line3(Point3(1, 1, 1), Vector3(2, 2, 2.000000001))
|
||||
line2 = Line3(Point3(1, 1, 1), Vector3(2, 2, 2.1))
|
||||
output_ans(False, line1 == line2, question="判断两条直线是否不相等")
|
||||
|
||||
def test_approx(self):
|
||||
|
@ -10,6 +10,8 @@ Copyright (C) 2020-2024 LiteyukiStudio. All Rights Reserved
|
||||
"""
|
||||
import logging
|
||||
|
||||
from mbcp.mp_math.angle import AnyAngle
|
||||
from mbcp.mp_math.const import PI
|
||||
from mbcp.mp_math.vector import Vector3
|
||||
|
||||
from tests.answer import output_ans
|
||||
@ -18,6 +20,26 @@ from tests.answer import output_ans
|
||||
class TestVector3:
|
||||
|
||||
"""测试问题集"""
|
||||
def test_cal_angle(self):
|
||||
"""
|
||||
测试计算两个向量的夹角
|
||||
Returns:
|
||||
"""
|
||||
"""小题1"""
|
||||
v1 = Vector3(0 ,1, 0)
|
||||
v2 = Vector3(0, 0, 1)
|
||||
correct_ans = AnyAngle(90)
|
||||
actual_ans = v1.cal_angle(v2)
|
||||
output_ans(correct_ans, actual_ans)
|
||||
|
||||
"""小题2"""
|
||||
v1 = Vector3(0, 1, 0)
|
||||
v2 = Vector3(1, 1, 0)
|
||||
correct_ans = AnyAngle(45)
|
||||
actual_ans = v1.cal_angle(v2)
|
||||
output_ans(correct_ans, actual_ans)
|
||||
|
||||
|
||||
def test_vector_cross_product(self):
|
||||
"""
|
||||
测试向量叉乘
|
||||
|
Reference in New Issue
Block a user