Ваша панель определяется вектором нормалей
n=(xn,yn,zn)
Для преобразования координации нам нужны 2 базовых вектора и нулевая точка для панели
Базовые векторы
Мы выбрали те "естественно", которые подходят к панели x / y (см. Позже для случая края):
b1=(1,0,zb1)
b2=(0,1,zb2)
И мы хотим
b1 x b2 = n*c
(c constскаляр)
чтобы убедиться, что эти два действительно являются основами
Теперь решите это:
b1 x b2= (0*zb2-zb1*1,zb1*0-1*zb2,1*1-0*0) = (zb1,zb2,1)
zb1*c=xn
zb2*c=yn
1*c=zn
c=zn,
zb2=yn/c=yn/zn
zb1=xn/c=xn/zn
b1=(1,0,yn/zn)
b2=(0,1,xn/zn)
и нормализуйте его
bv1=(1,0,yn/zn)*sqrt(1+(yn/zn*yn/zn))
bv2=(0,1,yn/zn)*sqrt(1+(xn/zn*xn/zn))
Случайкогда zn = 0: в этом случае вектор нормали параллелен панели x / y, и естественные базовые векторы не существуют, в этом случае вы должны выбрать базовые векторы b1 и b2 с помощью эстетического POV и пройти то же решениепроцесс или просто выбрал BV1 и bv2.
1027 *
Нулевая точка 1031 * вы говорили не точки привязки для вашей панели в OQ, но необходимо дифференцировать свою панель отбесконечное семейство параллельных панелей.
Если ваша точка привязки равна (0,0,0), это идеальноеchor point для преобразования координат, и ваша панель имеет
x*xn+y*yn+z*zn=0,
(y0,y0,z0)=(0,0,0)
Если нет, я предполагаю, что у вас есть точка привязки (xa, ya, za), а ваша панель имеет
x*xn+y*yn+z*zn=d
с константным скаляром.Естественной подгонкой будет точка панели, которая определяется нормальной проекцией исходной нулевой точки на панель:
P0=(x0,y0,z0)
с
(x0, y0, z0) = c * (xn,yn,zn)
Решение этой проблемы с
x*xn+y*yn+z*zn=d
дает
c*xn*xn+c*yn*yn+c*zn*zn=d
и
c=d/(xn*xn+yn*yn+zn*zn)
, таким образом
P0=(x0,y0,z0)=c*(xn,yn,zn)
найдено.
Finalпреобразование
достигается путем представления каждой точки вашей панели (то есть тех точек, которые вы хотите показать) как
P0+x'*bv1+y'*bv2
с x 'и y', являющимися новыми координатами.Поскольку мы знаем P0, bv1 и bv2, это довольно тривиально.Если мы не на грани, у нас есть нули в bv1.y и bv2.x, что еще больше уменьшает проблему.
x 'и y' - новые координаты, которые вы хотите.