Z.u.L. > Demos > Befehlsmodus > Makros

Makros für Poincaré-Geometrie

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)