В текущей версии интерпретатора поддерживаются:
Операторы присваивания и вызова [один оператор в строке].
Объявление составных построений [sub ... end sub].
Вызов составных построений в других составных построениях.
Выполнение циклов [for ... end for].
Измерители, элементы оформления [линии-выноски, размерные знаки, штриховки, заливки, стрелки].
Вывод пространственных координат точек [Z, !cout3D].
Не поддерживаются:
Вложенные операторы [ sub1 (sub2 (...)) ].
Вложенные циклы [for ... for ... end for ... end for].
Условный оператор [!if].
Списки.
Объектно-ориентированные объявления [операторы new и .].
Модификаторы стиля [через :].
Специальные символы
(Специальные символы: αβγδεζηθικλμνξοπρστυφχψω ∀∃∈∉∋∩∪∞∅°∠ ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ ≅≈≠≡⊂⊃⊄⊥)
Программа
PSIZE=1.5 nav(20,-15:0.65) Bx = -40 Ax = -100 A1 = pxy(Ax,30:A_1) A2 = pxy(Ax,-130:A_2,-8,-8) C3 = pxy(70,-50:C_3) B2 = pxy(Bx,-70:B_2,-8,-8) k = sxy(0,0,50,50:true,thin:k,50,50) v = vr(C3) cx = pab(k,v:CROSS,black) c3x = ls(C3,cx) c1 = hr(cx) ccc1 = c1 c2 = hr(C3) b1 = vr(B2) d = @pxy(-50,0) e = @pxy(50,0) e = @padd(B2,e) bs = sab(B2,e:true,thin:b',45,10) x = pab(b1,c2) e = padd(x,d) c2x = ls(e,C3) c2 = sab(x,e:true,thin:c_2=σ_2,15,10) x = @pab(b1,c1) e = @padd(x,d) c1 = sab(x,e:true,thin:c_1,-15,10) c1x = ls(x,cx) bc = ccx(A1,b1:helper) B0 = psp(bc,0:) h = hr(A1) v = vr(A1) b1 = sxy(Bx, 20, Bx, 70:true,thin:b_1,2,65) sub redgreen (Bi,Bj,bj,cj,i) lsj = sab(A2,Bi:false,helper) H=psp(lsj,0.5:CROSS,darkgray) oj=soa(lsj,H:true,helper) Ci=pab(c2,oj) v = @vr(Ci) Cj=pab(cj,v) ac=@sab(A2,Ci:false,thin) oc2=@soa(ac,Ci:true,helper) dac=@mdy(A1,Cj) dc2=@rd(ac,dac,true) Cs=@pab(oc2,dc2) //lsq1=ls(Cs,Ci) //lsq2=ls(Cs,A2) d2=@md(A2,Cs) d1=@md(Bi,A2) oc1=@ccx(Bi,d1:helper) oc2=@ccx(Bi,d2:helper) !cout(i,d1,d2) Pred=psp(oc1,0.25:) Pgreen=psp(oc2,0.25:) style(Pred,Pgreen:,red:,green) ret(Pred,Pgreen) end sub sub main (i) Bi = psp(bs,i:) v = @vr(Bi) Bj = pab(v,h:) style(Bi,Bj:,black) bls = ls(Bi,Bj) [bh,Ph,bj,Pj] = scp2(bc,Bj:true,thin) trj = trmv(A1,B0:A1,Pj) cj = trobj(trj,c1) [R1,G1] = redgreen (Bi,Bj,bj,cj,i) trj = trmv(A1,B0:A1,Ph) ch = trobj(trj,c1) [R2,G2] = redgreen (Bi,Bj,bh,ch,i) ret(R1,G1,R2,G2) end sub sub cones(Bi) oc1 = @ccx(Bi,A2:helper) oc2 = @ccx(A2,Bi:helper) [T1,T2]=p2c(oc1,oc2) T1T2=sab(T1,T2:false,thin) cc1=sab(T1,A2:true,thin) cc2=sab(T1,Bi:true,thin) cc3=sab(T2,A2:true,thin) cc4=sab(T2,Bi:true,thin) ldr1=leader(cc1:μ,-45,-30) ldr2=leader(cc4:λ,45,-30) Tx=pab(T1T2,c2:CROSS,black) [oc3,_]=c2p(T1,T2:helper) ortx=soa(T1T2,Tx:true,helper) [Mx,_]=pac(ortx,oc3:CROSS,black) d = md(Mx,Tx) v=vr(Tx) o=pab(h,v) oc1=@ccx(o,d) [D1,D2]=pac(v,oc1) style(D1,D2:_,black) !erase(oc1,oc2,Tx,ortx,Mx,v,o) ret(D1,D2,oc3,T1T2) end sub sub cones1(Bi) oc1 = @ccx(Bi,A2:helper) oc2 = @ccx(A2,Bi:helper) [T1,T2]=p2c(oc1,oc2) T1T2=@sab(T1,T2:false,thin) cc1=sab(T1,A2:true,thin) cc2=sab(T1,Bi:true,thin) cc3=sab(T2,A2:true,thin) cc4=sab(T2,Bi:true,thin) Tx=pab(T1T2,c2:CROSS,black) [oc3,_]=@c2p(T1,T2:helper) ortx=soa(T1T2,Tx:true,helper) [Mx,_]=pac(ortx,oc3:CROSS,black) d = md(Mx,Tx) v=vr(Tx) o=pab(h,v) oc1=@ccx(o,d) [D1,D2]=pac(v,oc1) style(D1,D2:_,magenta) T1T2=@sab(T1,Tx:false,thin) T1T2x=@sab(Tx,T2:false,thin) !erase(oc1,oc2,Tx,ortx,Mx,v,o) !erase(T1,T2,cc1,cc2,cc3,cc4) ret(D1,D2,oc3,T1T2,T1T2x) end sub sub rotate(i) Bi = @psp(bs,i:) v = @vr(Bi) Bj = @pab(v,h:) style(Bi,Bj:,black) bls = @ls(Bi,Bj) [bh,Ph,bj,Pj] = scp2(bc,Bj:true,helper) trj = trmv(A1,B0:A1,Pj) cj = @trobj(trj,c1) [D1,D2,oc3,t12,t12x]=cones1(Bi) [F1,F2]=trobi(trj,D1,D2) trh = trmv(A1,B0:A1,Ph) ch = @trobj(trh,c1) [E1,E2]=trobi(trh,D1,D2) !erase(D1,D2,Ph,Pj) ret(F1,F2,E1,E2,oc3,t12,trj,trh,t12x) end sub [D1,D2,oc3,t12]=cones(B2) pl1 = pline(0:,red) pl2 = pline(0:,red) plinpadd(pl1,D1) plinpadd(pl2,D2) d12=sab(D1,D2:false,thin) sub draft1(i) P=@psp(t12,i) //!cout(i,P) a=@soa(t12,P) [A,_]=@pac(a,oc3) d=md(A,P) v=@vr(P) h=@hrd(A1,d)//neg X=@pab(v,h) Y=@trobj(trj,X) h=@hr(P) v=@vr(Y) Z=@pab(h,v) //!erase(Y) ret(Z) end sub sub draft2(i) P=@psp(t12,i) //!cout(i,P) a=@soa(t12,P) [A,_]=@pac(a,oc3) d=md(A,P) v=@vr(P) h=@hrd(A1,d,true)//neg X=@pab(v,h) Y=@trobj(trj,X) h=@hr(P) v=@vr(Y) Z=@pab(h,v) //!erase(Y) ret(Z) end sub sub draft3(i) P=@psp(t12,i) //!cout(i,P) a=@soa(t12,P) [A,_]=@pac(a,oc3) d=md(A,P) v=@vr(P) h=@hrd(A1,d)//neg X=@pab(v,h) Y=@trobj(trh,X) ret(Y) end sub sub draft4(i) P=@psp(t12,i) //!cout(i,P) a=@soa(t12,P) [A,_]=@pac(a,oc3) d=md(A,P) v=@vr(P) h=@hrd(A1,d,true)//neg X=@pab(v,h) Y=@trobj(trh,X) ret(Y) end sub trj = trofs(A1:A1) trh = trj w00 = prow(draft3,0,1) u00 = prow(draft4,0,1) style(w00,u00:thin) for (80) i in (0:3.8) //!cout(i) [F1,F2,E1,E2,oc3,t12,trj,trh,t12x]=rotate(i) plinpadd(pl2,F2,E2) plinpadd(pl1,E1,F1) !erase(oc3,t12,trj,trh,t12x,F1,F2,E1,E2) end for plins(pl1,pl2) for (16) i in (0:4) //!cout(i) [F1,F2,E1,E2,oc3,t12,trj,trh,t12x]=rotate(i) e$=sab(F1,F2:false,thin) w$=prow(draft3,0.000001,0.999999) u$=prow(draft4,0.000001,0.999999) style(w$,u$:thin) !erase(t12) t12=t12x ww$=prow(draft3,0.000001,0.999999) uu$=prow(draft4,0.000001,0.999999) style(ww$,uu$:helper) !erase(oc3,t12,trj,trh,E1,E2,F1,F2) end for c1 = sab(x,e:true,thick:c_1,-55,10) bb1=vr(B2) B2M = pxy(-40, 1.0191432795715798) C2M = pxy(-93.68034505096442,70) C2N = pxy(-93.6803450509644,-50) style(B2M,C2M,C2N:,red) tri1 = pline(0:thick) plinpadd(tri1, A1,B2M,C2M) plinz(tri1) tri2 = pline(0:thick) plinpadd(tri2, A2,B2,C2N) plinz(tri2)
Графические команды
-- Точки
point = PXY (X, Y [,W]: [caption, cap-X, cap-Y])
point = PAB (line-a, line-b: [caption, cap-X, cap-Y])
point = PSP (obj, position| point-a, point-b, position: [caption, cap-X, cap-Y])
point-ideal = PIDEAL (line: [caption, cap-X, cap-Y])
point-real-part = PRE (complex-point: [caption, cap-X, cap-Y])
point-image-part-as-real = PIM (complex-point: [caption, cap-X, cap-Y])
point-real-and-image-part-as-real = PIM1 (complex-point: [caption, cap-X, cap-Y])
point-as-sum = PADD (point-a, point-b: [caption, cap-X, cap-Y])
point-as-difference = PSUB (point-a, point-b: [caption, cap-X, cap-Y])
point = PP (X: x^0-coef, x^1-coef, x^2-coef, ...: [caption, cap-X, cap-Y])
-- Прямые
line = SXY (X1, Y1, X2, Y2: [extension] [,style] [,color]: [caption, cap-X, cap-Y])
line = SAB (point-A, point-B: : [caption, cap-X, cap-Y])
line = SPA (line, point: : [caption, cap-X, cap-Y])
line = SOA (line, point: : [caption, cap-X, cap-Y])
line = SPF (point, angle, negative, line-to: : [caption, cap-X, cap-Y])
line = SKB (k-coeff, b-coeff [, x-flag]: : [caption, cap-X, cap-Y])
line = SABC (a-coeff, b-coeff, c-coeff: : [caption, cap-X, cap-Y])
arrow = ARROW (point-A, point-B: [style] [, color])
ls = LS (point-A, point-B: [length])
-- Окружности и дуги
circle = CCX (center-point, point|line|circle|V, diameterFlag: [style]: [caption, cap-X, cap-Y])
[circle, center-point] = CXYV (center-X, center-Y, V, diameter0flag: : [caption, cap-X, cap-Y])
[circle, center-point] = C2P (point-a, point-b: : [caption, cap-X, cap-Y])
[circle, center-point] = C3P (point-a, point-b, point-c: : [caption, cap-X, cap-Y])
[point-a, point-b] = PAC (line, circle: [caption, cap-X, cap-Y]: [caption, cap-X, cap-Y])
point-b = PAC2ND (line, circle, point-a: [caption, cap-X, cap-Y]: [caption, cap-X, cap-Y])
point-b = PAC2DIR (line, circle, point-a: [caption, cap-X, cap-Y]: [caption, cap-X, cap-Y])
[point-a, point-b] = P2C (circle-a, circle-b: [caption, cap-X, cap-Y]: [caption, cap-X, cap-Y])
point-b = P2C2ND (circle-a, circle-b, point-a: [caption, cap-X, cap-Y]: [caption, cap-X, cap-Y])
point-b = P2C2DIR (circle-a, circle-b, point-a: [caption, cap-X, cap-Y]: [caption, cap-X, cap-Y])
[line-a, line-b] = SCP (circle, point: : [caption, cap-X, cap-Y])
[line-a, point-a, line-b, point-b] = SCP (circle, external-point: : [caption, cap-X, cap-Y])
[arc, center-point] = A3P (point-a, point-b, point-c: : [style] [, color])
[arc, point-from, point-to] = APRA (center-point, radius, angle-from, angle-to: [style] [, color])
-- Кривые второго порядка
-- Полилинии
polyline = PLINE (code: [style] [, color])
PLINPADD (polyline, point-a [, point-b] [, point-c])
PLINS (polyline)
PLINZ (polyline)
SHADOW (polyline)
SECTION (polyline)
-- Линейки и измерители
value = MDX(point-a, point-b)
value = MDY(point-a, point-b)
value = MD(point, point-to|line|circle)
ruler = VR (x)
ruler = VRD (point, distance [, negative])
ruler = HR (y)
ruler = HRD (point, distance [, negative])
ruler = RD (line, distance [, negative])
obj = DL (point-a, point-b, pos-X, pos-Y: [caption, cap-X, cap-Y])
-- Преобразователи
T-object = TROFS (P-old: P-new)
T-object = TRMV (P1-old, P2-old | SEG-old: P1-new, P2-new | SEG-new)
T-object = TRSIM (P1-old, P2-old | SEG-old: P1-new, P2-new | SEG-new)
T-object = TRAFF (P1-old, P2-old, P3-old: P1-new, P2-new, P3-new)
T-object = TRMIR (point | line)
T-object = TRROD (line, point-old, point-new)
T-object = TRINV (circle)
[object, ...] = TROBJ (T-object, object, ...)
[object, ...] = TROBI (T-object, object, ...)
-- Системы координат начертательной геометрии
[axis, O] = CS12 (x, y)
[axis, O] = CS23 (x, y)
-- Разное
[x, y] = XY (point)
CAP (obj, caption [, cap-X, cap-Y])
CAPS (obj1, ...: caption-1 [, cap1-X, cap1-Y]: ...)
!ERASE (o1, o2, ...)
!RECSET (fname, max-recursion-depth)
!COUT (var1|precision-coeff|multiplier, var2|precision-coeff|multiplier, ...)
obj = LEADER (obj: [caption, cap-X, cap-Y])
/Пусто/