Я пытаюсь случайным образом генерировать преобразования координат для подстановки, которые я пишу на python. Я хочу повернуть мои данные (кучу координат [x, y, z]) о происхождении, в идеале используя кучу случайно генерируемых нормальных векторов, которые я уже создал для определения плоскостей - я просто хочу сдвинуть каждую плоскость I определяется так, что оно лежит в плоскости z = 0.Преобразования координат из случайно сгенерированного вектора нормалей
Вот фрагмент моего кода, который должен заботиться о вещах, когда у меня есть моя матрица преобразования. Я просто не уверен, как получить мою матрицу преобразования из моего нормального вектора, и если мне понадобится что-то более сложное, чем numpy для этого.
import matplotlib as plt
import numpy as np
import math
origin = np.array([35,35,35])
normal = np.array([np.random.uniform(-1,1),np.random.uniform(-1,1),np.random.uniform(0,1)])
mag = np.sum(np.multiply(normal,normal))
normal = normal/mag
a = normal[0]
b = normal[1]
c = normal[2]
#I know this is not the right transformation matrix but I'm not sure what is...
#Looking for the steps that will take me from the normal vector to this transformation matrix
rotation = np.array([[a, 0, 0], [0, b, 0], [0, 0, c]])
#Here v would be a datapoint I'm trying to shift?
v=(test_x,test_y,test_z)
s = np.subtract(v,origin) #shift points in the plane so that the center of rotation is at the origin
so = np.multiply(rotation,s) #apply the rotation about the origin
vo = np.add(so,origin) #shift again so the origin goes back to the desired center of rotation
x_new = vo[0]
y_new = vo[1]
z_new = vo[2]
fig = plt.figure(figsize=(9,9))
plt3d = fig.gca(projection='3d')
plt3d.scatter(x_new, y_new, z_new, s=50, c='g', edgecolor='none')
Что вы хотите сказать? Работает ли текущий код или нет? Благодарю. –
Мой вопрос: как получить правильную матрицу преобразования из нормального вектора? – Arnold
Теперь я понимаю ваш вопрос.Несколько матриц преобразования могут дать вам правильный ответ, потому что вы можете вращать плоскость вокруг оси z. Возможно, попробуйте http://math.stackexchange.com/ вместо этого? –