From d7e0e3e8f87472f4f752befcc206b3db440b6fc2 Mon Sep 17 00:00:00 2001 From: songsenand Date: Sun, 25 Feb 2024 23:42:37 +0800 Subject: [PATCH] feat(tdcgal/plane/plane.cpp-tdcgal/plane/objects.py): add Triangle2d BREAKING CHANGE: --- tdcgal/plane/objects.py | 25 +++++++++++++++++++++++++ tdcgal/plane/plane.cpp | 26 ++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/tdcgal/plane/objects.py b/tdcgal/plane/objects.py index 7f084ad..4679f4f 100644 --- a/tdcgal/plane/objects.py +++ b/tdcgal/plane/objects.py @@ -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)]})" + \ No newline at end of file diff --git a/tdcgal/plane/plane.cpp b/tdcgal/plane/plane.cpp index 2909ddc..3a4c94d 100644 --- a/tdcgal/plane/plane.cpp +++ b/tdcgal/plane/plane.cpp @@ -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_(m, "Triangle_2") + .def(py::init()) + .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, "返回两个点的平方距离");