Я пытаюсь генерировать траекторию между 2 точками a и b вдоль поверхности полушария .
ограничения:
< ul>
Конечная точка траектории (точка B) должна иметь скорость в определенном направлении < /strong>, заданная (VX, VY, VZ). < /li>
Я реализовал простой SLERP (сферическая линейная интерполяция) для этого, но как мне дать скорость в точке B?
Текущий код:
# Simple SLERP
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
def slerp(A, B, t):
# Interpolates between points A and B on a sphere using Slerp.
A = A / np.linalg.norm(A)
B = B / np.linalg.norm(B)
dot_product = np.clip(np.dot(A, B), -1.0, 1.0) # Clamped to avoid precision errors
omega = np.arccos(dot_product) # Angular distance
if np.isclose(omega, 0):
return A
return (np.sin((1 - t) * omega) * A + np.sin(t * omega) * B) / np.sin(omega)
A_cartesian = np.array([1, 0, 0]) # Point A on unit sphere
B_cartesian = np.array([0, 1, 0]) # Point B on unit sphere
num_points = 10 # Number of trajectory points
trajectory = np.array([slerp(A_cartesian, B_cartesian, t) for t in np.linspace(0, 1, num_points)])
# Visualization
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot(trajectory[:, 0], trajectory[:, 1], trajectory[:, 2], 'bo-', label="Trajectory")
ax.scatter(*A_cartesian, color='red', label='Start (A)')
ax.scatter(*B_cartesian, color='green', label='End (B)')
# Sphere surface
u, v = np.mgrid[0:2 * np.pi:20j, 0:np.pi:10j]
x = np.cos(u) * np.sin(v)
y = np.sin(u) * np.sin(v)
z = np.cos(v)
ax.plot_wireframe(x, y, z, color='gray', alpha=0.3)
ax.set_xlabel("X")
ax.set_ylabel("Y")
ax.set_zlabel("Z")
ax.legend()
plt.show()
Дайте мне знать, если есть какая -то путаница в отношении «Что означает скорость в точке».
Я пытаюсь генерировать траекторию между 2 точками a и b вдоль поверхности [b] полушария [/b]. ограничения: < ul> Конечная точка траектории (точка B) должна иметь скорость в определенном направлении < /strong>, заданная (VX, VY, VZ). < /li>
Я реализовал простой SLERP (сферическая линейная интерполяция) для этого, но как мне дать скорость в точке B? Текущий код: [code]# Simple SLERP
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D
def slerp(A, B, t): # Interpolates between points A and B on a sphere using Slerp. A = A / np.linalg.norm(A) B = B / np.linalg.norm(B)
# Sphere surface u, v = np.mgrid[0:2 * np.pi:20j, 0:np.pi:10j] x = np.cos(u) * np.sin(v) y = np.sin(u) * np.sin(v) z = np.cos(v) ax.plot_wireframe(x, y, z, color='gray', alpha=0.3)
Предполагая, что сфера находится в позиции (на данный момент), я использовал этот метод для расчета точки на поверхности сферы с определенным радиусом по заданным координатам широты/долготы (Vector2 x/y):
public static Vector3...
Я пытаюсь создать случайные точки на поверхности сферы, используя numpy. Я просмотрел пост, в котором объясняется равномерное распределение здесь. Однако нужны идеи, как генерировать точки только на поверхности сферы. У меня есть координаты (x, y,...
Я пытаюсь использовать matplotlib shapef для создания контурного графика данных о температуре. Затем я хотел бы сопоставить эти данные с трехмерной сферой. Я использую vpython для рендеринга изображения. У меня проблема в том, что полигоны не...
Я пытаюсь использовать matplotlib shapef для создания контурного графика данных о температуре. Затем я хотел бы сопоставить эти данные с трехмерной сферой. Я использую vpython для рендеринга изображения. У меня проблема в том, что полигоны не...