在 manim 中对齐不对称多边形

Align asymmetrical polygons in manim

我学会了在 Manim 中(通过顶点)绘制许多不对称的多边形。 (如果重要的话,我关心的形状是这张图表中的值“longa”、“brevis”、“semibrevis”和“minima”:https://upload.wikimedia.org/wikipedia/commons/a/a5/MensuralNotation.JPG )

其中一些是对称形状(如♢或□),易于在manim中对齐和操作。然而,有些是不对称的(如“p”或“d”),但它们的 center/axis-of-rotation/point-of-alignment 不是顶点的中心而是另一个点(如“p”或“d”的碗的中心)。

我想要一系列像“p ♢ □ d”这样的 VMobject 都在它们定义的中心对齐(对于“p”和“d”,我构建了多边形以便它们的原点应该是中心) .我已经尝试覆盖 get_center() 并尝试将对象与 ORIGIN 对齐,但是(即使在执行 .shift() 之后)所有对象都分配给 align_to、next_to 等,并且对象周围的VGroup全部忽略中心

有没有办法更有力地为物体指定中心?

(Manim 社区分支,最新截至 2022 年 3 月 10 日)

大多数内部对齐方法(使用 Cairo 渲染器时)使用 Mobjectget_critical_point 方法来确定应用于对齐的 mobject 的特殊点。如果您想追求您的 override-approach,那么我建议您忽略那个。

如果它真的只是您想要覆盖的自定义中心,那么像

def get_critical_point(self, direction):
    if np.array_equal(direction, [0, 0, 0]):
        return self.custom_center
    return super().get_critical_point(direction)

可能已经工作了。

虽然这可能会破坏其他一些东西,所以我不能完全判断是否整体上只实现和使用某种自定义辅助函数来对齐然后使用它们会更好。