Pictures by PC Anleitung zur geometrischen Programmierung am CADEX-Beispiel Vorbemerkung Als eine der ersten, praktischen Zeichenübungen unter Pictures by PC nutzten Sie vermutlich die Lektion „Einfaches CAD-Beispiel“ (vgl. CADEX.PDF). Darin wurde ein Flansch mit ausgerundeten Innentaschen entsprechend der Abbildung unten konstruiert. Um zeichnerisch zu obigem Ergebnis zu gelangen, mußten eine Reihe, interaktiver Manipulationen vorgenommen werden. An dieser Stelle wollen wir jetzt einmal einen ganz anderen, zugegeben etwas anspruchsvolleren Weg beschreiben, um die wesentlichen geometrischen Konturen zu gewinnen. Dazu nutzen wir aber keine interaktive Methode, sondern die Programmiermöglichkeiten von Pictures by PC. Natürlich wird sich der Aufwand, ein eigenständiges Programm zur Erzeugung dieses Flansches zu erstellen, nur dann lohnen, wenn damit eine ganze Teilefamilie mit variierenden Abmessungen generiert werden kann. Wir sprechen in einem solchen Fall von Variantenkonstruktion oder parametrischer Generierung. Anhand obigen Beispiels wollen wir im Folgenden schrittweise die geometrische Programmierung unter Pictures by PC erlernen. Geometrieanalyse Reduzieren wir zunächst einmal die Geometrie auf das Wesentlichste, bestimmen die notwendigen, variablen Eingabeparameter und analysieren, welche Punkte für die geometrischen Beschreibung mit Kreisbogen und Geraden von Bedeutung sind. Werfen wir einmal einen Blick auf die nächste Abbildung, so erkennen wir, daß die Geometrie des Teils spiegelsymmetrisch zur horizontalen Verbindungsgeraden durch die beiden Kreiszentren ist. Z.B. sind die x-Koordinaten der Punkte „pnt1“ und „pnt4“ gleich während die y-Koordinate einmal positiv und einmal negativ ist, sofern man „cent1“ als Bezugspunkt wählt. Die Berechnung aller Punktkoordinaten dieser Geometrie reduziert sich also auf ca. die Hälfte aller Punkte. Wenn man zusätzlich weiß, daß unter Pictures by PC Kreisbogen durch Zentrumskoordinate, Radius und Anfangs- bzw. Endwinkel eindeutig bestimmt sind, wird verständlich, warum nur Bogenzentren und Geradenendpunkte in der Zeichnung als Punkte markiert sind. Selbstverständlich wird man zusätzlich die Anfangs- und Endwinkel der Bogen errechnen müssen. Zur Nomenklatur: Die in der Zeichnung bemaßten Größen kennzeichnen die Eingabewerte für den Benutzerdialog unseres späteren Programms. Links vom Gleichheitszeichen („=“) steht der verwendete Variablenname und rechts davon der zugehörige Benutzerdialog. Grundsätzlich gibt es für die Lösung geometrischer Aufgabenstellungen häufig mehrere Möglichkeiten und sehr unterschiedliche Vorgehensweise (z.B. konventionell wie unten, mit Hilfe von Vektoren oder algebraisch etc.). Wir wählen den konventionellen Ansatz, da er außer einfacher Winkelfunktionen keine weiteren Kenntnisse voraussetzt. In der nächsten Abbildung ist schon der erste Lösungsansatz zu erkennen, wie man die Koordinaten der Punkte „cent2“ sowie „pnt1“, „pnt2“ (in Abhängigkeit vom Winkel „ang“) bezogen auf den Referenzpunkt „cent1“ ermitteln kann. Dazu sind sicherlich einige Erläuterungen hilfreich, die Sie anhand der Zeichnung unten nachvollziehen sollten. Ein typisches Kochrezept zur Lösung solcher oder ähnlicher geometrischer „Probleme“ ist immer, geeignete, rechtwinklige Dreiecke (ggf. aus Hilfskonstruktionen) zu gewinnen. Dann lassen sich im allgemeinen mittels der Winkelfunktionen bzw. des Satz des Pythagoras die benötigten Größen ermitteln. In unserem Fall ist als wichtigste Größe zunächst der Winkel „ang“ zu bestimmen, da die Punktkoordinaten „pnt1“ und „pnt2“ davon abhängig sind. Wie Sie aus der Abbildung unten ersehen können, ist eine einfache Hilfskonstruktion recht nützlich. Wenn Sie nämlich parallel zur Tangente (pnt1,pnt2) durch den Kreismittelpunkt „cent2“ eine Gerade ziehen (Radius rad2 auf Null reduzieren), ergibt sich daraus ein Schnittpunkt mit der Geraden zwischen „cent1“ und „pnt1“. Dieser Schnittpunkt bildet zusammen mit den Punkten „pnt1“, „pnt2“ und „cent2“ ein Rechteck. Darunter liegt ein rechtwinkliges Dreieck zwischen „cent2“, „cent1“ und dem neuen Schnittpunkt. Man kann leicht erkennen, daß darin der spitze Winkel wieder „ang“ ist. Somit haben wir über die Sinusfunktion folgende Beziehung: sin(ang)=Gegenkathete/Hypotenuse=(rad1-rad2)/d In der Abbildung nutzen wir die gleiche Formel nur mit Winkelfunktionen im Gradmaß („sind“ entspricht also „Sinus Degree“ vgl. CAL-Kommando), das erspart uns die Umrechnung vom Bogenmaß zum Gradmaß und vereinfacht den Ausdruck. Unsere Winkelbeziehung lautet also sind(ang)=(rad1-rad2)/d Da wir nicht am Sinus des Winkels, sondern am Winkel „ang“ selbst interessiert sind, ergibt sich mit der Umkehrfunktion „Arcussinus“ in unserem Fall „asind“ („Arcussinus Degree“) (durch Substitution) folgender Ausdruck ang=asind(sind(ang))=asind((rad1-rad2)/d) Für die Ermittlung der Punktkoordinaten der Punkte „pnt1“, „pnt2“ ist damit die größte Hürde genommen. Denn die Formeln xpnt1=sind(ang)*rad1 ypnt1=cosd(ang)*rad1 bzw. xpnt2=sind(ang)*rad2 ypnt2=cosd(ang)*rad2 ergeben sich einfach aus den Winkelfunktionen (s.o.). Für die x-Koordinate von „pnt2“ ist eigentlich noch zusätzlich die Verschiebung (Abstand „d“) in Bezug zu „cent1“ (unserem Bezugspunkt) zu berücksichtigen. Wir haben das der Einfachheit halber weggelassen, werden die Korrektur allerdings im Programm ausführen. Damit haben wir für die tangentiale Außenkontur praktisch alle notwendigen Größen berechnet, denn „pnt4“ ist spiegelsymmetrisch zu „pnt1“, ebenso wie „pnt3“ zu „pnt2“. Wenden wir uns jetzt der Innenkontur (Taschenkontur) zu. Sie besteht aus 6 Kreisbogen und zwei Geraden, die einen geschlossenen Konturzug bilden und jeweils tangential in einander übergehen. Die nächste Abbildung ist eine vergrößerte Darstellung der Kontur im Bereich „cent1“, „pnt5“ und „pnt9“. Darin suchen wir die kartesischen Koordinaten des Zentrumspunkt „pnt5“ des Ausrundungsbogens, dessen Anfangs- und Endwinkel sowie die Koordinaten des Startpunktes „pnt9“ der Geraden. Im ersten Moment sieht die Zeichnung komplizierter aus, als sie ist. Um die typischen rechtwinkligen Dreiecke zu erhalten, ziehen wir eine Parallele (mit dem Abstand w+rad5) zur tangentialen Außenkontur durch den Punkt „pnt5“. Diese Gerade bildet mit der Geraden (cent1,pnt1) einen rechten Winkel. Wenn man um „cent1“ einen gedachten Kreis mit dem Radius rad1+rad5 zieht wird unsere soeben gezeichnete Parallele von diesem im Punkt „pnt5“ geschnitten. Uns interessiert der Winkel „ang3“, der durch die Gerade (cent1, pnt5) und die Horizontale gebildet wird. Zunächst läßt sich jedoch nur eine Winkelbeziehung mit dem Winkel „ang2“ herstellen. Denn es gilt: cosd(ang2)=Ankathete/Hypotenuse=(rad1-w-rad5)/(rad1+rad5) Mit dem Trick über die Umkehrfunktion „Arcuscosinus“ erhält man den zugehörigen Winkel. Es gilt: ang2=acosd(cosd(ang2))=acosd((rad1-w-rad5)/(rad1+rad5)) Der gesuchte Winkel „ang3“ steht jetzt in einfacher Beziehung zu „ang2“ und „ang“, nämlich ang3=90-(ang2+ang) Damit ergeben sich auf einfache Weise die kartesischen Koordinaten des Punktes „pnt5“ xpnt5=cosd(ang3)*(rad1+rad5) ypnt5=sind(ang3)*(rad1+rad5) Entsprechend unproblematisch ergeben sich die Koordinaten für „pnt9“ in Abhängigkeit von „pnt5“. Es gilt xpnt9=xpnt5-(sind(ang)*rad5) ypnt9=ypnt5+cosd(ang)*rad5 Somit haben wir in diesem Bereich alle für uns wichtigen Größen bestimmt. Das Zentrum „pnt5“ des kleinen Ausrundungskreis mit dem Radius „rad5“, dem Startwinkel (360-ang3) und dem Endwinkel (90+ang). Ebenso ist die Position des Punktes „pnt9“ als Startpunkt der Geraden bekannt. Als nächstes gilt es in analoger Vorgehensweise die Geometrien im Bereich „cent2“, „pnt6“ und „pnt10“ zu berechnen (s. Abb. unten). Das ist geometrisch im Prinzip nichts Neues. Es bietet sich also für den Leser die Gelegenheit, das „Problem“ mit den vorgegebenen geometrischen Größen eigenständig zu lösen und die zugehörigen Formeln aufzustellen. Der Vollständigkeit halber folgt hier unser Lösungsvorschlag. Um unsere Winkelfunktionen sinnvoll nutzen zu können, ziehen wir wieder eine Parallele mit dem Abstand (w+rad5) zur Außentangente. Der Schnittpunkt eines gedachten Kreises um das Zentrum „cent2“ mir dem Radius (rad2+rad5) und der soeben erzeugten Gerade ergibt den Mittelpunkt „pnt6“ des kleinen Ausrundungskreises. Für uns ist die Ermittlung des Winkels „ang5“ von Bedeutung, da daraus die kartesischen Koordinaten des Punktes „pnt6“ (xpnt6,ypnt6) ermittelt werden können. Für den Winkel „ang4“ können wir über den Cosinus leicht eine Beziehung mit bekannten Größen aufstellen. Es gilt: acosd(ang4)=Ankathete/Hypotenuse=(rad2-w-rad5)/(rad2+rad5) Den Winkel „ang4“ erhalten wir dann aus der Umkehrfunktion Arcuscosinus mit ang4=acosd(acosd(ang4))=acosd((rad2-w-rad5)/(rad2+rad5)) Der gesuchte Winkel „ang5“ ergibt sich aus der einfachen Beziehung ang5=90+ang-ang4 Damit sind die Koordinaten der Punkte „pnt6“ und „pnt10“ über die Winkelfunktionen leicht berechenbar (vgl. Abb.). Bedenken Sie aber, daß sich unsere Formeln relativ auf das Zentrum „cent2“ beziehen. In unserem späteren Programm berücksichtigen wir natürlich die Verschiebung zum eigentlichen Bezugspunkt „cent1“. Betrachten wir jetzt noch die Spiegelsymmetrie zur Linie (cent1,cent2), so haben wir die Geometrie unseres Flansches komplett bestimmt und können mit der Programmierung beginnen. Dabei wollen wir didaktisch so vorgehen, daß wir zunächst mit einer sehr einfachen aber funktionellen Prozedur CADEX1.PRC beginnen, diese dann zur Version CADEX.PRC verbessern und schließlich eine optimale Basic-Variante CADEX.BIX mit grafischem Benutzerdialog generieren. Die genannten Prozeduren und Module dienen der Programmierausbildung und sind entsprechend umfangreich kommentiert. Natürlich sollte der Leser zur Kommandoanalyse ständig auf den Referenzteil der Pictures by PC Benutzerhilfe zurückgreifen. In dieser begleitenden Lektion werden wir lediglich prinzipielle Erläuterungen zu den genannten Prozeduren und Modulen machen. Beginnen wir jetzt mit der Prozedur CADEX1.PRC.