Изменение ракурса в векторной графике
Модель возникает как чертеж, выполненный в косоугольной проекции, и вращается путём движения мышью большого кружочка, так, как показано на иллюстрации красной стрелкой.
Можно приспособить эту же программу и для показа более сложных моделей, представляющих интерес для людей, обучающихся рисованию. Художественная модель, в отличие от более простого чертежа, состоит из множества линий и точек. Кроме того, было бы хорошо не только вращать модель вокруг вертикальной оси, но и наклонять её вверх или вниз, представляя её зрителю в разных ракурсах.
Проще всего это сделать поворотом вокруг горизонтальной оси, которая будет параллельна оси Х. Пусть ось поворота отстоит от фронтальной плоскости на величину Zo, а от основания – на величину Yo, так, как это показано на иллюстрации.
Для поворота модели нажимаем одновременно клавиши «Ctrl», «R» и «Sift». Причём «Sift» нажимаем для поворота в ракурсе вверх и не нажимаем при повороте вниз. Поворот осуществляется на 1 градус, поэтому ракурс меняется достаточно плавно.
Zo берётся как половина расстояния от оси X до верхней кромки рисунка, а значение Yo может изменяется от 10 до 100 пикселей в зависимости от цифры, выставленной на кнопке «Плотность».
Поворот на угол Uo делается с использованием формул для вычисления синуса и косинуса суммы двух углов. Ниже приводится текст подпрограммы, осуществляющей поворот стереометрической модели в ракурсе.
Public Sub SXYZR(MM As Integer) 'поворот модели вокруг оси, проходящей паралельной оси X
Dim I, L , N, M As Integer, S As String, V, Yo As Single
Dim Y, Z, R, Zo, Uo As Single 'положение оси и угол поворота
Dim SU, CU, SU1, CU1, SU2, CU2 As Single
If NPv = 0 Then Form1.Text2 = " массив G пуст": Exit Sub
Uo = pi180: If MM = 3 Then Uo = -Uo 'R-верхняя часть модели удаляется, нижняя приближается
SU = Sin(Uo): CU = Cos(Uo): Zo = YYo / 2: Yo = (CV + 1) * 10 'глубина расположения оси по Y
For I = 1 To NPv:
L = Pvv(I, 0): If L = 0 Then GoTo 5 'L-логотип эл-та 1-точка 2,3-прямая 4-плоскость 5,6-сечение
Y = Pvv(I, 2) / 10: Z = Pvv(I, 3) / 10:
GoSub 9: Pvv(I, 2) = (Y + Yo) * 10: Pvv(I, 3) = (Z + Zo) * 10:
Select Case L: Case 1, 5, 6: GoTo 5:
Case 2, 3: Y = Pvv(I, 5) / 10: Z = Pvv(I, 6) / 10:
GoSub 9: Pvv(I, 5) = (Y + Yo) * 10: Pvv(I, 6) = (Z + Zo) * 10:
Case 4: Y = Pvv(I, 5) + Yo: Z = Pvv(I, 6) + Zo: GoSub 9: Pvv(I, 5) = Y: Pvv(I, 6) = Z:
End Select
5 Next I:
Form1.Text1 = "": Form1.Text2 = " модель повёрнута"
Form1.Picture1.Line (1, 1)-(Kw, Kh), C240, BF: Call VPrun(1): Exit Sub
9 Z = Z - Zo: Y = Y - Yo: 'поворот координат
R = Y * Y + Z * Z: R = Sqr(R): If R < 0.1 Then Return:
SU1 = Z / R: CU1 = Y / R:
SU2 = SU * CU1 + CU * SU1: CU2 = CU * CU1 - SU * SU1:
Z = SU2 * R: Y = CU2 * R:
Return:
End Sub
'==============
Свидетельство о публикации №222070401142