|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Karim Rafikov 2:5049/143.10 25 Apr 2002 08:31:22 To : Evgeniy Jirnov Subject : Мадератор прости за флейм -------------------------------------------------------------------------------- EJ> Сабж, а то я с математикой и векторами не очень дружу: есть квадратный EJ> рисунок размером NxN, как нарисовать 3-х мерный куб(6-ти гранный), EJ> каждая сторона которого будет покрыта этим рисунком? Причем EJ> длина/высота/ширина куба - совпадает с картинкой - N. EJ> В общем-то мне надо узнать как одну сторону(повернутую на EJ> XAngle,YAngle и/или ZAngle) нарисовать с текстурой, а с остальными я EJ> уж сам как-нибудь. Подскажите как можно более проще, а то я в этом как EJ> свинья в апельсинах. Оптимальность не важна, красивость, Афигенное EJ> сглаживание и прочие навороты тоже не нужны. Hужно только изобразить. EJ> ПАМАГИТЕ, А ТО ПОМРУ! :) Заранее спасибо! Hе помирай, живи! Значит так, куб твой - это набор точек в трехмерном пространстве. Исходные координаты посчитай сам. Для простоты помести один из его углов в начало координат пример: 12 56 - Вот куб, две его стороны. Точка 3 - (0, 0, 0), точка 7 - (0, 1, 0), 34 78 точка 4 - (1, 0, 0), точка 6 - (1, 1, 1). Короче расположи куб так, чтобы его стороны были паралельны координатным плоскостям, а целые числа на осях сопоставь с точками рисунка, следующая точка - следующее число. Теперь я буду говорить не о кубе, а о наборе точек. Точку запишем как вектор, писали (x, y, z) а теперь |x| |y| |z| |1| Последняя единица - это размер точки. Теперь вспомни как умножать матрицу на столбец (наш новый вектор). Вот матрица, где sa - синус альфа, ca - косинус альфа, углы: a - поворот в плоскости xy от x к y b - -//- zx от z к x y - -//- yz от y к z Естествеено что x y и z образуют правую тройку(Как в учебнике). Теперь умножая каждую точку из массива на матрицу: (cacy-sasbsy sacb casy+sasbcy 0) (-sacy-casbsy cacb -sasy+casbcy 0) (-cbsy -sb cbcy 0) ( 0 0 0 1) Точки выполнят все три поворота. Если потом умножить их на матрицу (1 0 0 x) (0 1 0 y) (0 0 1 z) (0 0 0 k) То все точки линейно сдвинуться на (x, y, z) и размер умножится на k. Вот и все. Если пишешь на С++ могу помочь исходниками собственного производства. Храни вас бог, Karim Rafikov. --- УТВЕРЖДАЮ. MSG-редактор капитан 2.5 ранга Голд Дедович фор ДОС UNREG * Origin: у, царь, вздрогнули! (2:5049/143.10) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/239353cc7c895.html, оценка из 5, голосов 10
|