将三角形分成相等的子三角形的简单方法

时间:2019-04-09 03:23:01

标签: python geometry trigonometry

我正在尝试将三角形分成两半。三角形可以任意旋转,但始终可以等分为两半(等腰三角形不是等边的)。

我想到了如何将任意旋转的三角形分成2个子三角形,但是它很幼稚,需要检查该三角形是哪个旋转。

有没有更简单的方法将三角形分成两半?

下面是我要实现的示例。图像1是我原来的三角形,然后我的函数将在每个三角形上运行以生成图像2,然后我的函数将在每个三角形上再次运行并生成图像3。

enter image description here enter image description here enter image description here

def split_triangle_evenly(tri_pts):
    # Pre: tri_pts[1] will always be the split point
    # ie, tri_pts[1] is the right-angle 
    half_tri1 = None
    half_tri2 = None
    break_x = tri[1][0]
    break_y = tri[1][1]

    # Naive technique that needs to check the rotation of the triangle
    # in order to figure out how to split it
    # is there a simplier way?
    if break_x > tri[0][0] and break_x > tri[2][0]:
        half_tri1 = (
            tri[0],
            (tri[0][0], break_y),
            tri[1]
        )
        half_tri2 = (
            tri[2],
            (tri[0][0], break_y),
            tri[1]
        )
    elif break_x < tri[0][0] and break_x < tri[2][0]:
        ...
    elif ...

    return (half_tri1, half_tri2)

1 个答案:

答案 0 :(得分:0)

如果您的等腰三角形具有折断顶点tri_pnts[1],那么对于任何方向,对边的折断点都是

 breakpnt[0] = (tri_pnts[0][0]  + tri_pnts[2][0]) / 2
 breakpnt[1] = (tri_pnts[0][1]  + tri_pnts[2][1]) / 2

        half_tri1 = (
            tri[0],
            breakpnt,
            tri[1]
        )
        half_tri2 = (
            tri[1],
            breakpnt,
            tri[2]
        )

因为等腰三角形的中位数将其分成两个相似的三角形。

是否需要提供生成的三角形顶点的特定方向?这段代码为两个三角形(或CW或CCW)提供了相似的方向-如果重要的话...