Необходимо соединить 2 произвольные точки в пространстве синусоидой
Есть 2 произвольные точки в пространстве, которые образуют линию

Необходимо соединить их синусоидой, чтобы получилось что-то подобное
Еще нужно чтобы колебания синусоиды были параллельны оси X или Z относительно прямой Помогите пожалуйста, уже 4 день сижу с этим
Один из вариантов - получить углы вращения вектора, затем применить их к точке
import numpy
from math import sin, cos, radians
import math
start = (1, 1, 1)
end = (6, 8, 5)
vec_ = numpy.array([5, 7, 0])
def rotate_z (vec, rad):
mat = numpy.array(
[
[sin(rad), -sin(rad), 0],
[sin(rad), cos(rad), 0],
[0, 0, 1]
]
)
return mat * vec
def rotate_x (vec, rad):
mat = numpy.array([
[1, 0, 0],
[0, cos(rad), -sin(rad)],
[0, sin(rad), cos(rad)]
])
return mat* vec
def rotate_y (vec, rad):
mat = numpy.array([
[cos(rad), 0, sin(rad)],
[0, 1, 0],
[-sin(rad), 0, cos(rad)]
])
return mat* vec
def dot (vec1, vec2):
return vec1[0] * vec2[0] + vec1[1] * vec2[1] + vec1[2] * vec2[2]
def length (vec1):
return math.sqrt(
math.pow(vec1[0], 2) +
math.pow(vec1[1], 2) +
math.pow(vec1[2], 2)
)
def calc_angle (vec1, vec2):
return math.acos(dot(vec1, vec2) / (length(vec1) * length(vec2)))
rx = calc_angle(vec_, numpy.array([1, 0, 0]))
ry = calc_angle(vec_, numpy.array([0, 1, 0]))
rz = calc_angle(vec_, numpy.array([0, 0, 1]))
print(rx)
print(ry)
print(rz)
temp = rotate_x((2, -1, 0), rx)[0]
temp = rotate_y(temp, ry)
print(rotate_z(temp, rz)[0])

