В текущей версии интерпретатора поддерживаются:
Операторы присваивания и вызова [один оператор в строке].
Объявление составных построений [sub ... end sub].
Вызов составных построений в других составных построениях.
Выполнение циклов [for ... end for].
Измерители, элементы оформления [линии-выноски, размерные знаки, штриховки, заливки, стрелки].
Вывод пространственных координат точек [Z, !cout3D].
Не поддерживаются:
Вложенные операторы [ sub1 (sub2 (...)) ].
Вложенные циклы [for ... for ... end for ... end for].
Условный оператор [!if].
Списки.
Объектно-ориентированные объявления [операторы new и .].
Модификаторы стиля [через :].
Специальные символы
(Специальные символы: αβγδεζηθικλμνξοπρστυφχψω ∀∃∈∉∋∩∪∞∅°∠ ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ ≅≈≠≡⊂⊃⊄⊥)
Программа
PSIZE=1.5 [x12,O] = cs12 (-80,40) Ot = pxy(-80,-50:O_t) sub p4d(x,y,z,t:name) v = @vrd(O,x,true) h = @hrd(O,y,true) Ay = pab(v,h:{name}1,-5,12) h = @hrd(O,z) Az = pab(v,h:{name}2,-5,-6) h = @hrd(Ot,t) At = pab(v,h:{name}_t,-3,10) !erase(v,h) style(At,Ay:,#09f:,#f09) ret(Ay,Az,At) end sub sub edge (name1,name2) aby = sab({name1}y,{name2}y:false,thin) abz = sab({name1}z,{name2}z:false,thin) abt = sab({name1}t,{name2}t:false,thin) ret (aby,abz,abt) end sub [Ay,Az,At]= p4d(5,0,0,0:A) [By,Bz,Bt]= p4d(70,10,15,0:B) [Cy,Cz,Ct]= p4d(50,60,0,0:C) [Dy,Dz,Dt]= p4d(30,20,60,0:D) [Sy,Sz,St]= p4d(0,60,30,50:S) caps(St,Ay,Az,O:_,-2,-6:A_1=A_2,-8,12::_,-2,-5) [ABy,ABz,ABt] = edge(A,B) [ACy,ACz,ACt] = edge(A,C) [ADy,ADz,ADt] = edge(A,D) [ASy,ASz,ASt] = edge(A,S) [BCy,BCz,BCt] = edge(B,C) [BDy,BDz,BDt] = edge(B,D) [BSy,BSz,BSt] = edge(B,S) [CDy,CDz,CDt] = edge(C,D) [CSy,CSz,CSt] = edge(C,S) [DSy,DSz,DSt] = edge(D,S) Ft = @pxy(-140,-56:F_t,,,black) Gt = @pxy(-50,-90:G_t,,,black) taut = sab(Ft,Gt:true,helper:τ_t,-24,4) sub intersect (aby, abz, abt:name) At = pab(taut,abt:{name}_t,-4,-4) v = @vr(At) Az = pab(v,abz:{name}_2,-3,-4) Ay = pab(v,aby:{name}_1,2,2) style(At,Ay:,#09f:,#f09) !erase(v) ret (Ay,Az,At) end sub [Asy,Asz,Ast] = intersect (ASy,ASz,ASt:A') [Bsy,Bsz,Bst] = intersect (BSy,BSz,BSt:B') [Csy,Csz,Cst] = intersect (CSy,CSz,CSt:C') [Dsy,Dsz,Dst] = intersect (DSy,DSz,DSt:D') caps(Bsy,Csy,Asz:_,-1,10:_,-2,12:_,2,2) sub len (name1,name2,t1,t2,title) Ry = mdy({name1}y, {name2}y) Rz = mdy({name1}z, {name2}z) s = ls({name1}t, {name2}t) p = soa(s,{name1}t:true,thin) s = rd(s,Ry,t1) X = pab(s,p:CROSS) ls12 = ls(X,{name1}t) ls2 = ls(X,{name2}t) p = soa(ls2,X:true,thin) s = rd(ls2,Rz,t2) Az = pab(s,p:|{title}|,-8,-4) ls23 = ls(X,Az) ls1 = ls(Az,{name2}t) R = md(Az,{name2}t) //!cout(name1,name2,R) !erase(Ry,Rz,s,p) ret(R) end sub sub len2(name1,name2,t1,title) Ry = mdy({name1}y, {name2}y) s = ls({name1}z, {name2}z) p = soa(s,{name1}z:true,thin) s = rd(s,Ry,t1) Ar = pab(s,p:|{title}|,-8,10) lcs1 = ls(Ar, {name2}z) lcs2 = ls({name1}z, Ar) R = md(Ar,{name2}z) !erase(Ry,s,p) ret(R) end sub sub len1(name1,name2,t1,title) Rz = mdy({name1}z, {name2}z) s = ls({name1}y, {name2}y) p = soa(s,{name1}y:true,thin) s = rd(s,Rz,t1) Ar = pab(s,p:|{title}|,-8,10) lcs1 = ls(Ar, {name2}y) lcs2 = ls({name1}y, Ar) R = md(Ar,{name2}y) !erase(Rz,s,p) ret(R) end sub dBS = len(B,S,false,true,BS) dCS = len(C,S,false,true,SC) dDS = len(D,S,false,false,DS) dAS = len(A,S,true,false,AS) dAD = len2(D,A,true,AD) dBD = len2(B,D,false,BD) dCD = len2(D,C,true,CD) dBC = len1(B,C,true,BC) dAC = md(Ay,Cy) dAB = len2(B,A,false,AB) sub p4th (A1,ra:B1,rb:C1,rc:dAB,dBC,dAC) QA = pxy(90,0:CROSS,red) QB = pxy(90,dAB:CROSS,red) c1 = @ccx(QA,dAC) c2 = @ccx(QB,dBC) [QC,_] = p2c(c1,c2:CROSS,red) c11 = ccx(QA,ra:helper) c21 = ccx(QB,rb:helper) c31 = ccx(QC,rc:helper) [X1,X2] = p2c(c11,c21) [Y1,Y2] = p2c(c11,c31) a = sab(X1,X2:false,helper) b = sab(Y1,Y2:false,helper) T = pab(a,b:CROSS,yellow) t = sab(QA,T:true,thin) o = soa(t,T:true,thin) [Z1,Z2] = pac(o,c11:CROSS,black:CROSS,black) R = md(Z1,T) tr = traff(QA,QB,QC:A1,B1,C1) TS = trobj(tr,T) !erase(QA,QB,QC,c1,c2,c11,c21,c31,X1,X2,Y1,Y2,a,b,T,t,o,Z1,Z2,tr) ret(TS,R) end sub // ABCD-ABC,ABD,BCD,ACD // ABCS Cq2 = pxy(70,-40:C^q_2=A^q_2,-10,12) k = sxy(100,-10,150,40:true,thin) Aq2 = Cq2 Aq1 = pxy(70,0:A^q_1) v = vr(Aq1) h = hrd(Aq1,dAC,true) Cq1 = pab(v,h:C^q_1,-5,12) c1 = ccx(Aq1,dAB) c2 = ccx(Cq1,dBC) [_,Bq1] = p2c(c1,c2::B^q_1) v = vr(Bq1) h = hr(Aq2) Bq2 = pab(v,h:B^q_2,-5,12) [Sq1,hd]=p4th(Aq1,dAS:Bq1,dBS:Cq1,dCS:dAB,dBC,dAC) cap(Sq1,S^q_1) h = hrd(Aq2,hd) v = vr(Sq1) Sq2 = pab(v,h:S^q_2) // BCS+D=BCDS [Dx,hd]=p4th(Bq1,dBD:Sq1,dDS:Cq1,dCD:dBS,dCS,dBC) b1c1 = sab(Bq1,Cq1:true,thin) p1 = soa(b1c1,Dx:true,thin) b1s1 = sab(Bq1,Sq1:true,thin) b2s2 = sab(Bq2,Sq2:true,thin) w1 = sab(Dx,Cq1:true,thin) X = pab(w1,b1s1:CROSS,black) v = vr(X) X = pab(v,b2s2:CROSS,black) w2 = sab(Aq2,X:true,thin) v = vr(Dx) Dz = pab(w2,v:CROSS,yellow) h = hr(Bq1) X = pab(h,w1:CROSS,black) v = vr(X) X = pab(w2,v:CROSS,black) f2 = sab(Bq2,X:true,thin) p2 = soa(f2,Dz:true,thin) !erase(Dx) sub p2nd(A1,a2) v = vr(A1) A2 = @pab(v,a2) !erase(v) ret(A2) end sub sub plac(a1,a2,hd) A1 = psp(a1,0) A2 = @p2nd(A1,a2) B1 = psp(a1,1) B2 = @p2nd(B1,a2) Rz = mdy(A2,B2) p = soa(a1,B1) s = rd(a1,Rz) Br = pab(s,p) rl = sab(A1,Br) c = ccx(A1,hd) [Q1,Q2]=pac(rl,c) p = soa(a1,Q1) C1 = @pab(p,a1) p = soa(a1,Q2) C2 = @pab(p,a1) !erase(A1,A2,B1,B2,Rz,p,s,Br,rl,c,Q1,Q2) ret(C1,C2) end sub [_,Dq1] = plac(p1,p2,hd) Dq2 = p2nd(Dq1,p2) caps(Dq1,Dq2:D^q_1:D^q_2) sub ort2(C,S,D,X2,hd) //!cout(C,S,D) c1s1 = sab({C}1,{S}1:true,thin) c2s2 = sab({C}2,{S}2:true,thin) dx2 = sab({D}2,X2:true,thin) Y2 = pab(dx2,c2s2:CROSS,red) Y1 = @p2nd(Y2,c1s1) dx1 = sab({D}1,Y1:true,thin) X1 = @p2nd(X2,dx1) h2 = hr({D}2) Y2 = @pab(h2,c2s2) Y1 = @p2nd(Y2,c1s1) h1 = sab({D}1,Y1:true,thin) f1 = hr({D}1) Y1 = @pab(f1,c1s1) Y2 = @p2nd(Y1,c2s2) f2 = sab({D}2,Y2:true,thin) p1 = soa(h1,X1) p2 = soa(f2,X2) [As,Ats] = @plac(p1,p2,hd) At = @p2nd(As,p2) Att = @p2nd(Ats,p2) !erase(c1s1,c2s2,dx2,Y2,Y1,dx1,h1,h2,f1,f2,p1,p2,X1) ret(As,At,Ats,Att) end sub // CDS+A=ACDS [Dx,hd]=p4th(Cq2,dAC:Sq2,dAS:Dq2,dAD:dCS,dDS,dCD) [Ar1,Ar2,_,_] = ort2(Cq,Sq,Dq,Dx,hd) !erase(Dx) caps(Ar1,Ar2:A^r_1:A^r_2) sub ort1(C,S,D,X1,hd) //!cout(C,S,D) c1s1 = sab({C}1,{S}1:true,thin) c2s2 = sab({C}2,{S}2:true,thin) dx1 = sab({D}1,X1:true,thin) Y1 = pab(dx1,c1s1:CROSS,red) Y2 = @p2nd(Y1,c2s2) dx2 = sab({D}2,Y2:true,thin) X2 = @p2nd(X1,dx2) h2 = hr({D}2) Y2 = @pab(h2,c2s2) Y1 = @p2nd(Y2,c1s1) h1 = sab({D}1,Y1:true,thin) f1 = hr({D}1) Y1 = @pab(f1,c1s1) Y2 = @p2nd(Y1,c2s2) f2 = sab({D}2,Y2:true,thin) p1 = soa(h1,X1) p2 = soa(f2,X2) [As,Ats] = @plac(p1,p2,hd) At = @p2nd(As,p2) Att = @p2nd(Ats,p2) !erase(c1s1,c2s2,dx2,Y2,Y1,dx1,h1,h2,f1,f2,p1,p2,X2) ret(As,At,Ats,Att) end sub // ADS+B=ABDS [Dx,hd]=p4th(Ar1,dAB:Dq1,dBD:Sq1,dBS:dAD,dDS,dAS) [Br1,Br2,_,_] = ort1(Ar,Dq,Sq,Dx,hd) caps(Br1,Br2:B^r_1:B^r_2) !erase(Dx) //caps(Bt1,Bt2:B^t_1:B^t_2) sub edge2h (A,B) ls1 = ls({A}1,{B}1) ls2 = ls({A}2,{B}2) ret(ls1,ls2) end sub [A1B1,A2B2] = edge2h(Aq,Bq) [A1C1,A2C2] = edge2h(Aq,Cq) [B1C1,B2C2] = edge2h(Bq,Cq) [A1S1,A2S2] = edge2h(Aq,Sq) [B1S1,B2S2] = edge2h(Bq,Sq) [C1S1,C2S2] = edge2h(Cq,Sq) // BCS+D=BCDS [B1D1,B2D2] = edge2h(Bq,Dq) [C1D1,C2D2] = edge2h(Cq,Dq) [D1S1,D2S2] = edge2h(Dq,Sq) // CDS+A=ACDS [C1A1r,C2A2r] = edge2h(Cq,Ar) [D1A1r,D2A2r] = edge2h(Dq,Ar) [A1S1r,A2S2r] = edge2h(Ar,Sq) // ADS+B=ABDS [A1B1r,A2B2r] = edge2h(Ar,Br) [D1B1r,D2B2r] = edge2h(Dq,Br) [B1S1r,B2S2r] = edge2h(Br,Sq) sub divide (A,B,C:As,Bs) Q = pxy(0,-160:CROSS,orange) a = sab(A,Q:true,helper) b = sab(As,Q:true,helper) ap = spa(a,B:true,helper) bp = spa(b,Bs:true,helper) X = pab(ap,bp:CROSS,orange) r = sab(Q,X:false,thin) ap = spa(a,C:true,helper) X = pab(ap,r:CROSS,orange) bp = spa(b,X:true,helper) t = sab(As,Bs:true,helper) Cs = @pab(bp,t) !erase(Q,a,b,ap,bp,X,r,t) ret(Cs) end sub As2 = divide(St,At,Ast:Sq2,Aq2) As1 = p2nd(As2,A1S1) caps(As1,As2:A'^q_1,+4,+1:A'^q_2,+4,+1) Cs2 = divide(St,Ct,Cst:Sq2,Cq2) Cs1 = p2nd(Cs2,C1S1) caps(Cs1,Cs2:C'^q_1,+4,+1:C'^q_2,+4,+1) Ds2 = divide(St,Dt,Dst:Sq2,Dq2) Ds1 = p2nd(Ds2,D1S1) caps(Ds1,Ds2:D'^q_1,-6,+10:D'^q_2,-8,-6) Asr2 = divide(St,At,Ast:Sq2,Ar2) Asr1 = p2nd(Asr2,A1S1r) caps(Asr1,Asr2:A'^r_1,+4,+1:A'^r_2,-6,-6) Bsr2 = divide(St,Bt,Bst:Sq2,Br2) Bsr1 = p2nd(Bsr2,B1S1r) caps(Bsr1,Bsr2:B'^r_1,+4,+1:B'^r_2) Bs2 = divide(St,Bt,Bst:Sq2,Bq2) Bs1 = p2nd(Bs2,B1S1) caps(Bs1,Bs2:B'^q_1,+4,+1:B'^q_2) sub p3rd (A) h = hr({A}1) X = pab(h,k:CROSS,silver) ls1 = ls({A}1,X) h = hr({A}2) v = vr(X) A3 = pab(v,h) ls2 = ls(X,A3) ls3 = ls({A}2,A3) !erase(v,h) ret(A3) end sub Aq3 = p3rd(Aq) Bq3 = p3rd(Bq) Cq3 = p3rd(Cq) Dq3 = p3rd(Dq) Ar3 = p3rd(Ar) Br3 = p3rd(Br) Sq3 = p3rd(Sq) style(Sq3,Sq2,Sq1:CROSS,orange) lsa = ls(Aq3,Sq3) lsb = ls(Bq3,Sq3) lsc = ls(Cq3,Sq3) lsar = ls(Ar3,Sq3) lsbr = ls(Br3,Sq3) lsd = ls(Dq3,Sq3) As3 = p3rd(As) Bs3 = p3rd(Bs) Cs3 = p3rd(Cs) Ds3 = p3rd(Ds) Asr3 = p3rd(Asr) Bsr3 = p3rd(Bsr) sub edge2f (A,B:st1,st2,st3) a1 = sab({A}1,{B}1:false,st1) a2 = sab({A}2,{B}2:false,st2) a3 = sab({A}3,{B}3:false,st3) ret(a1,a2,a3) end sub edge2f (Ar,Asr:thick,thick,dashed) edge2f (Ar,Cq:dashed,thick,thick) edge2f (Ar,Br:thick,thick,thick) edge2f (Ar,Dq:dashed,thick,thick) edge2f (Br,Bsr:thick,thick,thick) edge2f (Br,Dq:thick,thick,thick) edge2f (Dq,Ds:thick,dashed,thick) edge2f (Dq,Cq:dashed,thick,thick) edge2f (Dq,Bq:thick,thick,thick) edge2f (Bq,Bs:thick,dashed,thick) edge2f (Bq,Cq:dashed,thick,thick) edge2f (Bq,Aq:thick,dashed,thick) edge2f (Aq,As:thick,dashed,thick) edge2f (Aq,Cq:dashed,dashed,dashed) edge2f (Cq,Cs:dashed,thick,dashed) [_,_,acs3]=edge2f (As,Cs:thick,thick,dashed) [_,abs2,_]=edge2f (As,Bs:thick,dashed,thick) edge2f (Cs,Bs:dashed,dashed,dashed) [_,acs2,_]=edge2f (Asr,Cs:thick,thick,dashed) U2 = pab(abs2,acs2:CROSS,black) u2 = sab(U2,As2:false,thick) edge2f (Asr,Bsr:thick,thick,dashed) edge2f (Ds,Bsr:thick,dashed,thick) edge2f (Ds,Asr:thick,dashed,dashed) edge2f (Cs,Ds:thick,dashed,dashed) [_,_,bds3]=edge2f (Bs,Ds:thick,dashed,thick) U3 = pab(bds3,acs3:CROSS,black) u3 = sab(U3,As3:false,thick) !erase(v,h,c1,c2,b1c1,p1,p2,b1s1,b2s2,w1,w2,X,Dz,f2) caps(Br2,Dq2,Ds2:_,-8,-6:_,-12,-2:_,-12,12) caps(Bq1,Bs1,Dq1,Ds1,Br1,Bsr1,Ar1,Cq1:_,-14,-2:_,-8,-6:_,-12,4:_,-4,-6:_,-12,4:_,-1,8:_,6,-1:_,-12,4) caps() nav(-20,20:0.82)
Графические команды
-- Точки
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])
/Пусто/