如何在二十面体上使三角形侧面积增加和减少,而形状却不保持“完整”

How do I make the triangular side areas increase and decrease on an icosahedron without the shape remaining "intact"?

本文关键字:完整 十面体 三角形 增加 侧面      更新时间:2023-09-26

我将如何使二十面体旋转以及三角形边的面积增加,如此处的视频所示:单击此处。

下面是一个使用 THREE 的 JavaScript 代码

.js

三。二十面体几何 = 函数 ( 半径, 细节 ( {

var t = ( 1 + Math.sqrt( 5 ( (/2;

变量顶点 = [ - 1, t, 0, 1, t, 0, - 1, - t, 0, 1, - t, 0, 0, - 1, t, 0, 1, t, 0, - 1, - t, 0, 1, - t, t, 0, - 1, t, 0

, 1, - t, 0, - 1, - t, 0, 1 ]; VaR 指数 = [ 0, 11, 5, 0, 5, 1, 0, 1, 7,

0, 7, 10, 0, 10, 11, 1, 5, 9, 5, 11, 4, 11, 10, 2, 10, 7, 6, 7, 1, 8, 3, 9, 4, 3, 4, 2, 3, 2, 6, 3, 6, 8, 3, 8, 9, 4, 9, 5, 2, 4, 11, 6, 2, 10, 8, 6, 7, 9, 8, 1 ];

三。PolyhedronGeometry.call( this, 顶点, 索引, radius, 细节 (;

this.type = '二十面体几何';

this.parameters = { radius: radius, detail: detail }; };

三。二十面体几何原型 = 对象.创建( 三。几何原型 (;

这是蒂莫西普拉特利/https://github.com/timothypratley

为了在位置上放大和缩小,每个三角形都需要以零为中心的点来构造。为了将三角形居中为零,我们找到 3 个顶点的中点,并从每个点中减去该中点。现在,可以在不离开原点的情况下缩放三角形。

然后将三角形添加到父对象中,并定位在我们之前计算的中点。因此,当三角形缩放时,它们相对于它们在二十面体形状中的位置进行缩放。

以下是构造不相交三角形的代码:

(defn icos []
  (let [icosahedron (js/THREE.Object3D.)]
    (doseq [triangle indices
            :let [vs (map vertices triangle)
                  [x y z :as face-center] (map average (transpose vs))
                  normalized-vertices (for [v vs]
                                        (map - v face-center))
                  face-mesh (geo normalized-vertices)]]
      (.set (.-position face-mesh) x y z)
      (.add icosahedron face-mesh))
    icosahedron))

对于每个三角形,查找其顶点。找到面部中心。从每个顶点中减去面中心。创建几何图形。将几何图形定位在相对于二十面体的面中心。你可以在github上看到完整的渲染代码。

最终结果:Icopop允许您在旋转时缩放三角形或二十面体。