Пример использования линий, точек


рис. 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.

Перейти на следующую страницу Перейти на предыдущую страницу
Сайт управляется системой uCoz