Z.u.L. > Demos > Befehlsmodus > Makros
Z.u.L. kann Konstruktionsbeschreibungen wie mit einer Programmiersprache festhalten. Als Beispiel sehen Sie hier die Makros, die für die Poincaré-Geometrie benutzt wurden. Um diese Makros in einer Konstruktion abzulegen (anstatt sie als beschreibende Konstruktion zu laden), werden die Makros in einer leeren Konstruktion geladen, eventuelle Hilfsmakros gelöscht und die Konstruktion mit Makros gespeichert.
// Makros für die Poincare-Geometrie Makro Spiegeln an Kreis // Spiegele einen Punkt an einen Kreis. M=point parameter k=circle(M) // Grundkreis parameter P=point // Zu spiegelnder Punkt g1=line(M,P) M1=midpoint(M,P) h=plumb(g1,M1) A,B=intersection(k,h) g2=line(M,A) // so MA = PA M2=midpoint(M,A) g=plumb(g2,M2) target S=intersection(g1,g) // MS = SA // Wegen Ähnlickeit gilt MS / r = r / MP Ende Makro Mittelsenkrechte // Mittelsenkrechte zwischen zwei Punkten. parameter A=point // Erster Punkt parameter B=point // Zweiter Punkt g=line(A,B) M=midpoint(A,B) target ms=plumb(g,M) Ende Makro Kreis durch drei Punkte // Konstruiert den Kreis durch drei Punkte parameter A=point parameter B=point parameter C=point g1=Mittelsenkrechte(A,B) g2=Mittelsenkrechte(A,C) Mk=intersection(g1,g2) target k=circle(Mk,A) Ende Makro Poincare-Gerade // Konstruiert die Poincare-Gerade durch zwei Punkte M=point parameter k=circle(M) // Basiskreis parameter A=point // Erster Punkt parameter B=point // Zweiter Punkt AA=Spiegeln an Kreis(k,A) // Der Kreis geht durch A, B und AA target c=Kreis durch drei Punkte(A,B,AA) Ende Makro Poincare-Strecke // Konstruiert die Poincare-Strecke durch zwei Punkte M=point parameter k=circle(M) // Basiskreis parameter A=point // Erster Punkt parameter B=point // Zweiter Punkt g=Poincare-Gerade(k,A,B) restrict(g,A,B) acute(g) target g Ende Makro Poincare-Kreis // Konstruiert den Poincare-Kreis um M durch B M=point parameter k=circle(M) // Basiskreis parameter A=point // Mittelpunkt parameter B=point // Punkt auf Kreis cc=Poincare-Gerade(k,A,B) g=line(c(cc),B) // Gerade durch Mittelpunkt von cc und B h=plumb(g,B) s=line(M,A) Mc=intersection(h,s) target c=circle(Mc,B) Ende Makro Poincare-Mittelsenkrechte // Konstruiert die Senkrechte auf der Mitte zwischen A und // B zu AB M=point parameter k=circle(M) // Grundkreis parameter A=point // Erster Punkt parameter B=point // Zweiter Punkt k1=Poincare-Kreis(k,A,B) k2=Poincare-Kreis(k,B,A) C,D=intersection(k1,k2) target g=Poincare-Gerade(k,C,D) Ende Makro Poincare-Schnitt // Schneidet zwei Poincare-Geraden. // Für Kreise kann man den normalen Schnitt nehmen M=point MA=point MB=point parameter k=circle(M) // Grundkreis parameter g=circle(MA) // Erste Poincare-Gerade parameter h=circle(MB) // Zweite Poincare-Gerade X,Y=intersection(h,g) close(X,M) target X Ende Makro Poincare-Mitte // Konstruiert die Mitte zwischen zwei Punkten. M=point parameter k=circle(M) // Grundkreis parameter A=point // Erster Punkt parameter B=point // Zweiter Punkt h=Poincare-Mittelsenkrechte(k,A,B) g=Poincare-Gerade(k,A,B) target X=Poincare-Schnitt(k,h,g) end Makro Poincare-Lot // Konstruiere das Lot durch A auf die Poincare-Gerade g. M=point parameter k=circle(M) // Grundkreis parameter A=point // Punkt Mc=point D=point parameter g=circle(Mc,D) // Poinecare-Gerade l=line(M,Mc) U,V=intersection(l,g) close(U,M) k1=Poincare-Kreis(k,A,U) X,Y=intersection(g,k1) target h=Poincare-Mittelsenkrechte(k,X,Y) Ende Makro Poincare-Kreis aus 3 Punkten // Konstruiert einen Kreis um C mit Länge A,B M=point parameter k=circle(M) // Grundkreis parameter A=point // Erster Radiuspunkt parameter B=point // Zweiter Punkt parameter MC=point // Mittelpunkt g=Poincare-Gerade(k,A,MC) h=Poincare-Lot(k,A,g) c=Poincare-Kreis(k,A,B) X,Y=intersection(c,h) U,V=intersection(k,g) cp=Kreis durch drei Punkte(U,V,X) hh=Poincare-Lot(k,MC,g) R,S=intersection(hh,cp) close(S,M) target ct=Poincare-Kreis(k,MC,S) Ende Makro Tangente // Erzeuge die Tangente an einen Kreis in einem Punkt, // der auf dem Kreis liegen muss. M=point parameter c=circle(M) // Kreis parameter A=point // Punkt auf diesem Kreis g=line(A,M) target t=plumb(g,A) Ende Macro Poincare-Winkel M=point parameter k=circle(M) // Grundkreis parameter A=point // Erster Schenkelpunkt parameter B=point // Scheitelpunkt parameter C=point // Zweiter Schenkelpunkt ba=Poincare-Gerade(k,B,A) BA=Tangente(ba,B) la=plumb(BA,A) AA=intersection(BA,la) bc=Poincare-Gerade(k,B,C) BC=Tangente(bc,B) lc=plumb(BC,C) CC=intersection(BC,lc) a=angle(AA,B,CC) acute(a) target a Ende Makro Poincare-Winkel Abtragen // Trägt den Winkel ABC an D relativ zu g an. M=point parameter k=circle(M) // Grundkreis parameter A=point // Erster Schenkelpunkt parameter B=point // Scheitelpunkt parameter C=point // Zweiter Schenkelpunkt parameter D=point // Neuer Schenkelpunkt D Mg=point parameter g=circle(Mg) // Gerade durch D a=Poincare-Winkel(k,A,B,C) t=Tangente(g,D) X,Y=intersection(t,k) a1=angle(X,D,a) DD=Spiegeln an Kreis(k,D) hh=Mittelsenkrechte(D,DD) gg=plumb(a1,D) Mt=intersection(hh,gg) target circle(Mt,D) a2=angle(X,D,-a) gg2=plumb(a2,D) Mt2=intersection(hh,gg2) target circle(Mt2,D) Ende // *************************************************** // Zeige Grundkreis window(0,0,8) Mc=point(0,0) hide(Mc) k=circle(Mc,5) color(green,k) thickness(thin,k) fill(k) hide(Mc)