Как вычислить середины ребер каждого треугольника икосаэдраPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как вычислить середины ребер каждого треугольника икосаэдра

Сообщение Anonymous »


Am trying to compute the midpoints of each triangle edges of an icosahedron to get an icosphere which is the composion of an icosahedron subdivided in 6 or more levels. i tried to calculate the newly created vertices of each edges but some points wore missing. I tried to normalize each mid point but still the points woren't evenly spread out and some points wore missing.

import matplotlib.pyplot as plt import numpy as np num_points = 12 indices = np.arange(0, num_points, dtype='float') r = 1 vertices = [ [0.0, 0.0, -1.0], [0.0, 0.0, 1.0] ] # poles # icosahedron for i in range(num_points): theta = np.arctan(1 / 2) * (180 / np.pi) # angle 26 degrees phi = np.deg2rad(i * 72) if i >= (num_points / 2): theta = -theta phi = np.deg2rad(36 + i * 72) x = r * np.cos(np.deg2rad(theta)) * np.cos(phi) y = r * np.cos(np.deg2rad(theta)) * np.sin(phi) z = r * np.sin(np.deg2rad(theta)) vertices.append([x, y, z]) vertices = np.array(vertices) Icosahedron:


Изображение


# Triangle Subdivision for _ in range(2): for j in range(0, len(vertices), 3): v1 = vertices[j] v2 = vertices[j + 1] v3 = vertices[j + 2] m1_2 = ((v1 + v2) / 2) m2_3 = ((v2 + v3) / 2) m1_3 = ((v1 + v3) / 2) m1_2 /= np.linalg.norm(m1_2) m2_3 /= np.linalg.norm(m2_3) m1_3 /= np.linalg.norm(m1_3) vertices = np.vstack([vertices, m1_2, m2_3, m1_3,]) print(vertices) plt.figure().add_subplot(projection='3d').scatter(vertices[:, 0], vertices[:, 1], vertices[:, 2]) plt.show() icosphere attempt:


Изображение


I used this as reference to create an icosahedron https://www.songho.ca/opengl/gl_sphere.html and what am expecting to achive is this:

Geodesic polyhedro:


Изображение


I tried debugging the subdivision of each edges and it performed well:

import numpy as np import matplotlib.pyplot as plt vertices = [[1, 1], [2, 3], [3, 1]] vertices = np.array(vertices) for j in range(2): for i in range(0, len(vertices), 3): v1 = vertices v2 = vertices[i + 1] v3 = vertices[i + 2] m1_2 = (v1 + v2) / 2 m1_3 = (v1 + v3) / 2 m2_3 = (v2 + v3) / 2 vertices = np.vstack([vertices, m1_2, m1_3, m2_3]) plt.figure().add_subplot().scatter(vertices[:, 0], vertices[:, 1]) plt.plot(vertices[:, 0], vertices[:, 1], '-ok') plt.show() Midpoints of each edgeL


Изображение



Источник: https://stackoverflow.com/questions/780 ... cosahedron
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как вычислить середины ребер каждого треугольника икосаэдра
    Anonymous » » в форуме Python
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Как вычислить угол от точки до середины линии?
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Как вычислить угол от точки до середины линии?
    Anonymous » » в форуме Python
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • IndexedDB ищет слово из середины значений записи в таблице
    Гость » » в форуме Javascript
    0 Ответы
    32 Просмотры
    Последнее сообщение Гость
  • «Положение прокрутки моего CSS-файла сбрасывается до середины при обновлении в VS Code. Есть идеи, почему?»
    Гость » » в форуме CSS
    0 Ответы
    21 Просмотры
    Последнее сообщение Гость

Вернуться в «Python»