Я только знаком с линейной алгеброй, но я пытаюсь сделать перекрестие на графическом приложении, над которым я работаю.
I have a point: (x,y,z)
И я пытаюсь донести это до сути:
(2/(x+y),(5y+z)/(2x+2y),3)
Я читал, и это можно сделать, умножив мою точку на «матрицу преобразования», чтобы получить желаемую точку. Но я не уверен, как это сделать.
Кто-нибудь знает, есть ли шаг за шагом, как добраться до этих координат? Если бы я мог видеть конечный результат, я мог бы попытаться изменить его.
Вы должны добавить однородную координату вес;
Тогда ваши уравнения имеют форму
Итак, вы должны найти матрицу M, которая представляет собой следующие уравнения:
WX = 2,
WY = 2.5y+0.5z,
WZ = 3x+3y,
W = x+y
Вы не можете сделать это напрямую, потому что только линейные преобразования (http://en.wikipedia.org/wiki/Linear_map) могут быть представлены матрицей, а ваше преобразование не является линейным. Что вы можете сделать, это переписать ваше преобразование следующим образом:
(x,y,z,w)->( 2w , 5y/2+z/2 , 3x+3y )
который теперь линейный, и его соответствующее преобразование определяется как:
T(x,y,z,w)=[0 0 0 2; 0 5/2 1/2 0; 3 3 0 0]*(x,y,z,w)
где матрица задается числами между [] и каждая строка отделяется знаком «;». Как видите, теперь у вас есть линейное преобразование, которое не дает нужной вам точки, но если вы оцените свое преобразование по w = 1, а также разделите каждую запись в результирующем векторе на (x + y), то вы иметь результат, который вы хотите достичь. Я имею в виду,
(2/(x+y),(5y+z)/(2x+2y),3) =
[1/(x+y)]*[0 0 0 2; 0 5/2 1/2 0; 3 3 0 0]*(x,y,z,w=1)
Я надеюсь, что это полезно для вас.