Я хотел бы нарисовать цилиндр с использованием matplotlib вдоль длины точки (x1, y1) и (x2, y2) с заданным радиусом r. Пожалуйста, дайте мне знать, как это сделать.Как нарисовать цилиндр с использованием matplotlib вдоль длины точки (x1, y1) и (x2, y2) с заданным радиусом?
ответ
Просто для удовольствия я собираюсь обобщить это на любую ось (x0, y0, z0) на (x1, y1, z1). Установите z0 и z1 в 0, если вам нужна ось в плоскости xy.
Вы можете найти векторное уравнение для оси довольно легко, найдя единичный вектор в том же направлении, что и ось, затем добавив его к p0 и масштабируя по длине оси. Обычно вы можете найти координаты круга с x = x0 + cos (theta) * R и y = y0 + sin (theta) * R, но круги не находятся в плоскости xy, поэтому нам понадобится сделать наши собственные оси единичными векторами, перпендикулярными оси цилиндра и друг друга, а затем получить координаты xyz. Я использовал этот сайт, чтобы помочь мне разобраться в этом: http://mathforum.org/library/drmath/view/51734.html. Вот код:
import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from scipy.linalg import norm
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
origin = np.array([0, 0, 0])
#axis and radius
p0 = np.array([1, 3, 2])
p1 = np.array([8, 5, 9])
R = 5
#vector in direction of axis
v = p1 - p0
#find magnitude of vector
mag = norm(v)
#unit vector in direction of axis
v = v/mag
#make some vector not in the same direction as v
not_v = np.array([1, 0, 0])
if (v == not_v).all():
not_v = np.array([0, 1, 0])
#make vector perpendicular to v
n1 = np.cross(v, not_v)
#normalize n1
n1 /= norm(n1)
#make unit vector perpendicular to v and n1
n2 = np.cross(v, n1)
#surface ranges over t from 0 to length of axis and 0 to 2*pi
t = np.linspace(0, mag, 100)
theta = np.linspace(0, 2 * np.pi, 100)
#use meshgrid to make 2d arrays
t, theta = np.meshgrid(t, theta)
#generate coordinates for surface
X, Y, Z = [p0[i] + v[i] * t + R * np.sin(theta) * n1[i] + R * np.cos(theta) * n2[i] for i in [0, 1, 2]]
ax.plot_surface(X, Y, Z)
#plot axis
ax.plot(*zip(p0, p1), color = 'red')
ax.set_xlim(0, 10)
ax.set_ylim(0, 10)
ax.set_zlim(0, 10)
plt.show()
Можно ли сделать этот цилиндр с двумя концами, имеющими два разных радиуса? – coolswastik
Нет, потому что тогда это будет усеченный конус, а не цилиндр. Если вы хотите это сделать, вам нужно, чтобы R линейно изменялась как функция t, при R = R1, когда t = 0 и R = R2, когда t = длина оси. –
Спасибо! Эми. Это решило мою проблему. :) – coolswastik
- 1. рисовать точки используя matplotlib.pyplot [[x1, y1], [x2, y2]]
- 2. createjs, анимировать линию с x1, y1, x2, y2 координаты
- 3. Как найти Y-Intercept с X1, X2, Y1, Y2
- 4. Как разделить строку (x1, y1) (x2, y2) формат
- 5. лихие d3js с x, y, x1, y1, x2, y2, z
- 6. Рассчитать x2, если мы знаем расстояние, x1, y1, y2
- 7. SVG, оживить линию от x1, y1 до x2, y2?
- 8. При рисовании дуги с использованием CGContextAddArcToPoint(), что означает (x1, y1) и (x2, y2)?
- 9. Кнопка не работает, чтобы нарисовать линейный график с его координатой (x1, x2, y1, y2)
- 10. Как вычислить точку (x2, y2) с точкой (x1, y1) и углом
- 11. точки линий x1, x2, y1, y2 не совпадают с узлами в радиальном дереве
- 12. Python разрыв строки в длинный «с x1 как y1, x2, как y2, x3, как у3» заявление
- 13. , строя данные с x1, y1, x2, y2 на том же рисунке - matlab
- 14. Нарисуйте линию между двумя точками (x1, y1, z1) до (x2, y2, z2)
- 15. Центрируйте штырь в середине квадрата с четырьмя координатами (x1, y1) (x2, y2) (x3, y3), (x4, y4)
- 16. C# Windows 10 App - Draw Line Slowly From X1, Y1 to X2, Y2
- 17. Рассчитать x1 x2 y1 y2 от центра координат, высоты и ширины
- 18. как бы я конвертировать SQRT (x2 - x1)^2 (y2 - y1)^2 для соответствующего кода Java
- 19. Метод перемещения объекта из точки (x1, y1) в точку (x2, y2) с заданной скоростью по прямой в java
- 20. Управляйте на y из списка {{x1, y1}, {x2, y2}, ... {xn, yn}}
- 21. Рассчитать атрибут линейного градиента SVG x1 y1 x2 y2, если мы знаем угол?
- 22. Любой лучший способ генерации кортежа всех возможных кортежей в виде (x1, y1, x2, y2)?
- 23. Jquery UI сдерживания x1, x2
- 24. Найти Min (x1, x1 * x2, x1 * x2 * x3, ..., x1 * x2 * ... * xN) в Matlab
- 25. В файле с 10 000 точками формы X1 y1 X2 y2 ,,, Как определить не менее 4, которые образуют квадрат? Java
- 26. Как нарисовать Несколько строк между x1, y, 1, y2 с использованием coreplot в ios8?
- 27. Перемещение точки вдоль линий
- 28. Построение двух точек (x1, y1) и (x2, y2), которые сохраняются в матрице, а затем присоединяют их по строке в R
- 29. Если у меня есть линия от точки x1, y1 до x2, y2, как я могу нарисовать две строки, идущие из точки x2, y2 под углом 45 градусов, чтобы сделать стрелку?
- 30. Рисование кругов вдоль линии с использованием рекурсии и фракталов - Java
цилиндр просто сложены круги ... Вы можете вычислить точки края окружности с 'х, у = center_x + соз (угол) * радиус, center_y + sin (angle) * radius' –