Пример использования линий, точек
рис. 28
Пример TESTLINEX.TXT:
start {
camera (0,-120,50)-(0,0,0)
scenerotate (45,-30,0)-(0,0,0)
}
int arrow (vec v1,v2) {
// основной вектор
vec main=v2-v1
dbl len=|main|
// вектор для вычисления перпендикуляра для main
vec n1=(main.z, main.x, main.y)
// перпендикуляры
vec n2=[main, n1]
n1=[main, n2]
// нормализуем - засечки стрелки должны быть в 10 раз меньше ствола
dbl k=len*2/50
main=main*4/50
n1=n1*k/|n1|
n2=n2*k/|n2|
// формируем координаты засечек
vec s1=n1-main+v2
vec s11=-n1-main+v2
vec s2=n2-main+v2
vec s22=-n2-main+v2
// модель
line v1-v2-s1-s11-s2-s22 (1,-2,-3,4,-2,-5,2,-6),3,
}
arrow ((0,0,-10),(0,0,100))
arrow ((-10,0,0),(100,0,0))
arrow ((0,-10,0),(0,100,0))
line (107,0,5)-(113,0,-5)-(113,0,5)-(107,0,-5) (1,-2,3,-4),3,
line (-3,105,5)-(0,105,0)-(3,105,5)-(-3,105,-5) (1,-2,3,-4),3,
line (-3,0,115)-(3,0,115)-(-3,0,105)-(3,0,105),3,
В примере используется подпрограмма, рисующая стрелку с 4 подсечками с помощью конструкции line. После ее 3х-кратного вызова, идет отрисовка обозначений осей XYZ.
Далее пример использования конструкции для отображения точек:
рис. 29
Пример 2 TESTPOINTS.TXT:
start {
camera (0,-150,50)-(0,0,0)
}
cilin (0,0,0)-(0,0,50)-20
plate (0,0,0)-(0,0,-1)
plate (0,0,50)-(0,0,1)
0,3,O1+O2
int c
vec a[]
for i=0 to 15 {
for k=0 to 15 {
a[k].x=rnd(20)*cos(rnd(360)*pi/180)
a[k].y=rnd(20)*sin(rnd(360)*pi/180)
a[k].z=rnd(50)+50
}
c = rnd(16777216)
line a[] points,c,
}
В примере используется конструкция line для формирования потока точек, случайным образом распределенных над цилиндром. Для этого после массива координат указано служебное слово points.
Перейти на следующую страницу Перейти на предыдущую страницу