feat(tdcgal/plane/plane.cpp-tdcgal/plane/objects.py): add Triangle2d

BREAKING CHANGE:
This commit is contained in:
songsenand 2024-02-25 23:42:37 +08:00
parent 596c000ed6
commit d7e0e3e8f8
2 changed files with 51 additions and 0 deletions

View File

@ -410,4 +410,29 @@ class Circle2D(Shape2D, Circle_2):
def general_equation(self) -> str:
return f"{str(self._expression.expand())} = 0"
# 三角形类
class Triangle2D(Shape2D, Triangle_2):
def __init__(
self,
points: Tuple[
Union[Point2D, Tuple[float, float]],
Union[Point2D, Tuple[float, float]],
Union[Point2D, Tuple[float, float]],
] = None,
**kwargs,
):
"""
三角形Triangle2D的初始化方法
Args:
points: 三个端点
"""
Shape2D.__init__(self, **kwargs)
points = [point_maker(p) for p in points]
Triangle_2.__init__(self, *points)
# 重载`repr`方法返回Triangle2D的字符串表示
def __repr__(self) -> str:
return f"Triangle2D(points: {[self.vertex(i) for i in range(3)]})"

View File

@ -204,6 +204,32 @@ void init_plane(py::module_ &m) {
.def("opposite", &Circle_2::opposite, "返回反向的圆")
.def("orthogonal_transform", &Circle_2::orthogonal_transform)
.def("bbox", &Circle_2::bbox, "返回圆的边界框");
py::module_<Triangle_2>(m, "Triangle_2")
.def(py::init<Point_2, Point_2, Point_2>())
.def("vertex", &Triangle_2::vertex, "返回第`i % 3`个顶点, `i`是参数")
.def("vertices", &Triangle_2::vertices, "返回三角形的三个顶点")
.def(py::self == py::self)
.def(py::self != py::self)
.def("area", &Triangle_2::area, "返回三角形的面积")
.def("is_degenerate", &Triangle_2::is_degenerate, "判断三角形是否退化")
.def("orientation", &Triangle_2::orientation, "返回三角形的方向")
.def("oriented_side", &Triangle_2::oriented_side,
"判断点和三角形之间的位置关系")
.def("bounded_side", &Triangle_2::bounded_side, "判断点和三角形的边界位置关系"
"判断点是否在三角形的边上")
.def("has_on_positive_side", &Triangle_2::has_on_positive_side,
"判断点是否在三角形的正面上")
.def("has_on_negative_side", &Triangle_2::has_on_negative_side,
"判断点是否在三角形的负面上")
.def("has_on_boundary", &Triangle_2::has_on_boundary)
.def("has_on_bounded_side", &Triangle_2::has_on_bounded_side,
"判断点是否在三角形的边界上")
.def("has_on_unbounded_side", &Triangle_2::has_on_unbounded_side,
"判断点是否在三角形的内部")
.def("opposite", &Triangle_2::opposite, "返回反向的三角形")
.def("bbox", &Triangle_2::bbox, "返回三角形的边界框")
.def("transform", &Triangle_2::transform, "返回经过变换后的三角形")
m.def("squared_distance", &squared_distance<Point_2, Point_2>,
"返回两个点的平方距离");