Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Vovanius Uryvaeff                    2:5020/400     25 Apr 2002  13:57:49
 To : Evgeniy Jirnov
 Subject : Помогите pls...
 -------------------------------------------------------------------------------- 
 
 Wed Apr 24 2002 20:48, Evgeniy Jirnov wrote to All:
 
  EJ> Мир твоему дому, All.
 
  EJ> Сабж, а то я с математикой и векторами не очень дружу: есть квадратный
  EJ> рисунок размером NxN, как нарисовать 3-х мерный куб(6-ти гранный), каждая
  EJ> сторона которого будет покрыта этим рисунком? Причем длина/высота/ширина
  EJ> куба - совпадает с картинкой - N.
 
  EJ> В общем-то мне надо узнать как одну сторону(повернутую на XAngle,YAngle
  EJ> и/или ZAngle) нарисовать с текстурой, а с остальными я уж сам как-нибудь.
 
 Ээээ... занесло тебя браток.... ну ладно, поможем..
 
 пусть наш куб располагается центром в точке например (0,0,d) имеет размер
 2x2x2 (по одному в каждую сторону координат) повернут сначала вокруг оси X,
 потом Y, потом Z. отгда координаты каждой вершины можно вычислить так:
 x' = a                           | 
 y' = b*cos(XAngle)-c*sin(XAngle) | поворот вокруг X  
 z' = b*sin(XAngle)+c*cos(XAngle) |
 
 x" = x'*cos(YAngle)-z'*sin(YAngle) |
 y" = y'                            | поворот вокруг Y
 z" = x'*sin(YAngle)+z'*cos(YAngle) |
 
 x = x"*cos(ZAngle)-y"*sin(ZAngle) |
 y = x"*sin(ZAngle)+y"*sin(ZAngle) | поворот вокруг Z
 z = z"
 
 где abc определяют помер вершины:
    (-1,1,1)  +-----+ (1,1,1)
             /|    /|
  (-1,-1,1) +-----+ |(1,-1,1)
  (-1,1,-1) | +---|-+ (1,1,-1)
            |/    |/
 (-1,-1,-1) +-----+ (1,-1,-1)
 отсюда находим x0,y0,z0,x1,y1,z1,x2,y2,z2 для дальнейших вычислений
 берем одну грань, например переднюю выбираем точки так:
  t2  +-----+
      |     |
      |     |
  t0  +-----+ t1
 и считаем
 x0 = x(t0), y0 = y(t0),z0 = z(t0)
 x1 = (x(t1)-x0)/N, y1 = (y(t1)-y0)/N, z1 = (z(t1)-z0)/N
 x2 = (x(t2)-x0)/N, y1 = (y(t2)-y0)/N, z1 = (z(t2)-z0)/N
 угол твоей картинки в пространстве находится в точке (x0,y0,z0), а картинка
 располагается так что пикселы по х лежат вдоль вектора (x1,y1,z1), а по y -
 (x2,y2,z2). тогда произвольный пиксел будет лежать в пространстве в точке:
 x(i,j) = x0+i*x1+j*x2
 y(i,j) = y0+i*y1+j*y2
 z(i,j) = z0+i*z1+j*z2, где i,j - координаты в матрице картинки x и y
 соответственно.
 
 теперь спроэцируем это все на экран.
 пусть мы смотрим из точки 0,0,0 в сторону оси z
 координаты точки x,y,z на экране будут
 Xscr = x*f/z
 Yscr = y*f/z, f - фокусное расстояние - от него зависит размер изображения на
 экране (подобрать по вкусу - обычно f~z0)
 таким образом мы можем наставить точек на экране соответствующих этой
 плоскости.
 Красивее сделать конечно все это через матрицы 4x4 но для этого случая с
 учетом твоего отношения к ним можно так.
 
 ...сижу тут, никого не трогаю, примус починяю...
 
 --- ifmail v.2.15dev5
  * Origin: FidoNet Online - http://www.fido-online.com (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Помогите pls...   Evgeniy Jirnov   24 Apr 2002 20:48:38 
 Мадератор прости за флейм   Karim Rafikov   25 Apr 2002 08:31:22 
 Помогите pls...   Vovanius Uryvaeff   25 Apr 2002 13:57:49 
 Помогите pls...   Alex Astafiev   25 Apr 2002 11:17:02 
 Помогите pls...   Michael Bolotnicov   07 Jun 2002 21:25:00 
Архивное /ru.algorithms/166798fffae53.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional