2Qx15(RUS)
...Составьте соответствующие системы уравнений и решайте. Элементарно, но, боюсь, что вам это почти не пригодится...
...Неостроумно. Наверняка вы в школе плохо учитесь...
...Да не буду я конец линейки к глазу прикладывать, опасно....Повторяю, расстояние до плоскости от наблюдателя (i.e от плоскости экрана) в моделируемом трехмерном пространстве меняется линейно при сканировании полигона...
1)Составить соответствующие системы уравнений и решить?
Circiter, я в 11 классе, только недавно изучали производные, а вы хотите чтобы я прям сейчас на одной коленке накатал эти трехмерные уравнения и одной левой(а точнее правой) решил их? Да я год назад пытался это сделать, но вот что-то они уж очень большими получились. Вот я и хочу узнать способ по проще.
2) Плохая шутка - не повод для глубоких рассуждений...Учусь я на "4-5",иначе мне нечего было делать на таких форумах...И еще, если интересно, я так думал в 6 лет.
3)Это не опасно. Я вас не заставляю тыкать линейкой в глаз или у вас руки тресутся?
И еще тогда объясните это:
И где тут расстояние линейно изменяется?!
-----------------------------------------------------------------------------------------
По поводу ссылки http:[url]//www.codenet.ru/progr/video/tex/index.php[/url]
Вообще подскажите, где есть больше инфы по этой теме?? Вот начал с самого первого уравнения:
Цитата:
Для точек (x,y,z), проекцией которых является (sx,sy) имеем:
Код:
sx = xSize/2+x*dist/(z+dist),
sy = ySize/2-y*dist/(z+dist)
Я понял, что это формула вычисления проекция точки на экране, используя координаты точки.
Всего 2 строки! Я эту формулу давно искал. Подставил в программу, и....получил такую ****... она вообще неправильная...
И вот автор статьи расписывает уравнения, преобразует их,подробно все считает, считает и:
Цитата:
...Осталось немного, подставить Mx = Bx-Ax и так далее, а потом подставить эти a и b в формулы для Du и Dv. В процессе подстановок что-то сократится, что-то упростится, но формулы для Du и Dv все равно получатся длиной в несколько строк.
И приходит он к следующему:
Цитата:
Код:
u = (C1*sx+C2*sy+C3) / (C4*sx+C5*sy+C6),
v = (C7*sx+C8*sy+C9) / (C4*sx+C5*sy+C6),
причем C1, ..., C9 - просто какие-то коэффициенты, зависящие от грани
Я просто угараю от С1-С9
И как мне их найти??? Может кто-то напишет?
Я гуглил, гуглил, так ничего и не нашел
----------------------------------------------------------------------------------------
Как и обещал, процедура рисования одноцветного четырехугольника, обычным строковым способом. Демонстративный вариант, т.е. понятный человеку:
Private Sub DrawQPlane()
P1X = VSX(0) 'VSX, VSY - массив с проекциями точек на экран
P2X = VSX(1)
P3X = VSX(2)
P4X = VSX(3)
P1Y = VSY(0)
P2Y = VSY(1)
P3Y = VSY(2)
P4Y = VSY(3)
If P1Y < P2Y Then 'Сортировка Вершин
T = P1X: P1X = P2X: P2X = T
T = P1Y: P1Y = P2Y: P2Y = T
End If
If P1Y < P3Y Then
T = P1X: P1X = P3X: P3X = T
T = P1Y: P1Y = P3Y: P3Y = T
End If
If P1Y < P4Y Then
T = P1X: P1X = P4X: P4X = T
T = P1Y: P1Y = P4Y: P4Y = T
End If
If P2Y < P4Y Then
T = P2X: P2X = P4X: P4X = T
T = P2Y: P2Y = P4Y: P4Y = T
End If
If P3Y < P4Y Then
T = P3X: P3X = P4X: P4X = T
T = P3Y: P3Y = P4Y: P4Y = T
End If
X21 = P2X - P1X 'Вычисление коэфициентов смещения
X31 = P3X - P1X
X42 = P4X - P2X
X43 = P4X - P3X
Y21 = P2Y - P1Y
Y31 = P3Y - P1Y
Y42 = P4Y - P2Y
Y43 = P4Y - P3Y
If Y21 = 0 Then
SX21 = X21
Else
SX21 = X21 / Y21
End If
If Y31 = 0 Then
SX31 = X31
Else
SX31 = X31 / Y31
End If
If Y42 = 0 Then
SX42 = X42
Else
SX42 = X42 / Y42
End If
If Y43 = 0 Then
SX43 = X43
Else
SX43 = X43 / Y43
End If
BX21 = P2X
BX31 = P3X
BX42 = P4X
BX43 = P4X
If P2Y > P3Y Then 'Начало строкового "малевания" (рисования)
For CiA = P4Y To P3Y - 1
Line (BX42, CiA)-(BX43, CiA)
BX42 = BX42 + SX42
BX43 = BX43 + SX43
Next
For CiA = P3Y To P2Y - 1
Line (BX42, CiA)-(BX31, CiA)
BX42 = BX42 + SX42
BX31 = BX31 + SX31
Next
For CiA = P2Y To P1Y - 1
Line (BX21, CiA)-(BX31, CiA)
BX21 = BX21 + SX21
BX31 = BX31 + SX31
Next
Else
For CiA = P4Y To P2Y - 1
Line (BX42, CiA)-(BX43, CiA)
BX42 = BX42 + SX42
BX43 = BX43 + SX43
Next
For CiA = P2Y To P3Y - 1
Line (BX21, CiA)-(BX43, CiA)
BX21 = BX21 + SX21
BX43 = BX43 + SX43
Next
For CiA = P3Y To P1Y - 1
Line (BX21, CiA)-(BX31, CiA)
BX21 = BX21 + SX21
BX31 = BX31 + SX31
Next
End If
End Sub
Все переменные, кроме массивов VSX() и VSY() - временные и могут иметь любые имена.
Конечно, у меня код в 4 раза меньше по операциям, но он вообще никак не читабелен, хотя результат такой-же.
И еще: масштаб проецирования: Пиксели, а не Твипы!
Результат:
Цвет можно изменить, если хочется, а про красные точки - это уже другая история, сделал процедуру для мышки, что-бы их можно было двигать...