{"id":364,"date":"2019-05-13T07:36:34","date_gmt":"2019-05-13T07:36:34","guid":{"rendered":"https:\/\/www.cssec.de\/blog\/?p=364"},"modified":"2020-07-01T08:51:57","modified_gmt":"2020-07-01T08:51:57","slug":"3-punkt-kreisbogen-in-standardform-bringen","status":"publish","type":"post","link":"https:\/\/www.cssec.de\/blog\/2019\/05\/13\/3-punkt-kreisbogen-in-standardform-bringen\/","title":{"rendered":"3-Punkt-Kreisbogen in Standardform bringen"},"content":{"rendered":"<p>Hallo da drau\u00dfen,<\/p>\n<p>heute mal ein l\u00e4ngerer Beitrag, der mal wieder aus einem Projekt entstanden ist. Aktuell entwickle ich einige Dinge am Laserteile-Shop &#8211; es wird demn\u00e4chst einen sehr speziellen Ableger geben, viel mehr darf ich aber nicht verraten. Im Zuge der Umsetzung sind einige geometrische Dinge umzuwandeln. Bisher bin ich da relativ verschont geblieben, wie bereits im letzten Mathematik-Blog-Eintrag hat das in der Vergangenheit mein Kollege und guter Freund \u00fcbernommen, der inzwischen aber in Rente ist und wohl nicht mehr allzu viel machen wird.<br \/>\nDaher musste ich mich mal etwas mit der Materie befassen.<\/p>\n<p>Schluss der langen Worte, worum geht es genau?<\/p>\n<p>Ich habe einen Kreisbogen gegeben, der durch 3 Punkte definiert ist:<\/p>\n<p>Startpunkt: <img decoding=\"async\" src=\"https:\/\/www.cssec.de\/blog\/wp-content\/ql-cache\/quicklatex.com-39cb48323a782ab825c4a1448e34b031_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#80;&#95;&#123;&#48;&#125;&#61;&#32;&#40;&#120;&#95;&#123;&#48;&#125;&#44;&#32;&#121;&#95;&#123;&#48;&#125;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"18\" width=\"98\" style=\"vertical-align: -4px;\"\/><br \/>\nbeliebiger Punkt auf dem Kreisbogen: <img decoding=\"async\" src=\"https:\/\/www.cssec.de\/blog\/wp-content\/ql-cache\/quicklatex.com-2340f9828ed2345716672e63df08117c_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#80;&#95;&#123;&#49;&#125;&#61;&#32;&#40;&#120;&#95;&#123;&#49;&#125;&#44;&#32;&#121;&#95;&#123;&#49;&#125;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"18\" width=\"98\" style=\"vertical-align: -4px;\"\/><br \/>\nEndpunkt: <img decoding=\"async\" src=\"https:\/\/www.cssec.de\/blog\/wp-content\/ql-cache\/quicklatex.com-0cf548c0b0313e6b41ae02110e7d0ed3_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#80;&#95;&#123;&#50;&#125;&#61;&#32;&#40;&#120;&#95;&#123;&#50;&#125;&#44;&#32;&#121;&#95;&#123;&#50;&#125;&#41;&#32;\" title=\"Rendered by QuickLaTeX.com\" height=\"18\" width=\"98\" style=\"vertical-align: -4px;\"\/><\/p>\n<p>Das entsprechende Format, was ich lesen muss, stellt einen Kreisbogen so dar. Damit ich das aber in ein Vektor-Format (speziell DXF) umgewandelt werden kann, wird der Kreisbogen mit folgenden Parametern erwartet:<\/p>\n<ul>\n<li>Mittelpunkt<\/li>\n<li>Radius<\/li>\n<li>Anfangswinkel<\/li>\n<li>Endwinkel<\/li>\n<\/ul>\n<p>So aus der Kalten hatte ich erst mal gar keine Idee, wie ich das umsetzen kann. Gl\u00fccklicherweise gibt es ja Google, dabei bin ich auf folgende nette Seite gesto\u00dfen:<\/p>\n<p><a href=\"https:\/\/arndt-bruenner.de\/mathe\/scripts\/kreis3p.htm\">https:\/\/arndt-bruenner.de\/mathe\/scripts\/kreis3p.htm<\/a><\/p>\n<p>Um aus den drei Punkten den eigentlichen Kreis zu ermitteln, wird ein Gleichungssystem aufgestellt:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.cssec.de\/blog\/wp-content\/ql-cache\/quicklatex.com-272afb72313464b5c0aded1f10dd3930_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;&#32;&#45;&#32;&#66;&#120;&#95;&#123;&#48;&#125;&#32;&#45;&#32;&#67;&#121;&#95;&#123;&#48;&#125;&#32;&#61;&#32;&#45;&#40;&#120;&#95;&#123;&#48;&#125;&#94;&#123;&#50;&#125;&#32;&#43;&#32;&#121;&#95;&#123;&#48;&#125;&#94;&#123;&#50;&#125;&#41;&#32;\" title=\"Rendered by QuickLaTeX.com\" height=\"20\" width=\"226\" style=\"vertical-align: -5px;\"\/><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.cssec.de\/blog\/wp-content\/ql-cache\/quicklatex.com-b76ffd354da5b94e08e38c6f58ba61eb_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;&#32;&#45;&#32;&#66;&#120;&#95;&#123;&#49;&#125;&#32;&#45;&#32;&#67;&#121;&#95;&#123;&#49;&#125;&#32;&#61;&#32;&#45;&#40;&#120;&#95;&#123;&#49;&#125;&#94;&#123;&#50;&#125;&#32;&#43;&#32;&#121;&#95;&#123;&#49;&#125;&#94;&#123;&#50;&#125;&#41;&#32;\" title=\"Rendered by QuickLaTeX.com\" height=\"21\" width=\"226\" style=\"vertical-align: -6px;\"\/><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.cssec.de\/blog\/wp-content\/ql-cache\/quicklatex.com-c95c60332d645f7e392330eaa1144654_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;&#32;&#45;&#32;&#66;&#120;&#95;&#123;&#50;&#125;&#32;&#45;&#32;&#67;&#121;&#95;&#123;&#50;&#125;&#32;&#61;&#32;&#45;&#40;&#120;&#95;&#123;&#50;&#125;&#94;&#123;&#50;&#125;&#32;&#43;&#32;&#121;&#95;&#123;&#50;&#125;&#94;&#123;&#50;&#125;&#41;&#32;\" title=\"Rendered by QuickLaTeX.com\" height=\"20\" width=\"226\" style=\"vertical-align: -5px;\"\/><\/p>\n<p>Genaueres k\u00f6nnt ihr dem entsprechenden Link entnehmen.<br \/>\nMit Hilfe des Gleichungssystems k\u00f6nnen dann Mittelpunkt und Radius ermittelt werden.<br \/>\nSoweit so gut. Nun muss das Gleichungssystem aber gel\u00f6st werden. Hierf\u00fcr nehmen wir das Gau\u00df-Verfahren. Ich wei\u00df, dass ich das mal zu Studienzeiten in Turbo Pascal implementiert hatte, da das nun aber schon \u00fcber 20 Jahre her ist, musste ich mir das mal selbst wieder herleiten.<br \/>\nWieder einmal hat mir da Google geholfen:<\/p>\n<p><a href=\"https:\/\/www.matopt.de\/grundlagen\/gauss-algorithmus.html\">https:\/\/www.matopt.de\/grundlagen\/gauss-algorithmus.html<\/a><\/p>\n<p><del>Bl\u00f6derweise ist dem Autor im Beispiel ein ziemlich schlimmer Fehler unterlaufen, das Tableau 1 ist definitiv falsch, weil er wohl nicht das 3fache der ersten Zeile genutzt hat, sondern das -3 fache der ersten Zeile, was definitiv falsch ist. Aber zumindest die Erkl\u00e4rung ist so nicht schlecht.<\/del><\/p>\n<p><strong>Update: Inzwischen wurde der Fehler des Autors behoben, daher passt nun auch das Beispiel.<\/strong><\/p>\n<p>Hier wird genauer das Gau\u00df-Verfahren erkl\u00e4rt, allerdings ist da noch keine Computer-Implementierung hinterlegt. Daher werde ich das mal hier in diesem Blog in java tun. Die entsprechenden Dinge erkl\u00e4re ich dann als Kommentar. Ich habe mir die ganzen Sachen mal hergeleitet, man kann die Klasse mal als Ansatz nutzen, ggf. m\u00fcsste man noch etwas mehr Fehlerbehandlung durchf\u00fchren, wenn das System eben nicht l\u00f6sbar ist.<\/p>\n<pre lang=\"java\">package com.cutworks.btleasy.helper;\r\n\r\nimport java.util.Vector;\r\n\/**\r\n * Diese Klasse l\u00f6st ein Gleichungssystem \u00fcber das Gauss-Verfahren\r\n * Bei einem Gleichungssystem mit n Variablen werden dabei n Vektoren (Zeilen) der Gr\u00f6\u00dfe n+1 erwartet,\r\n * wobei der n+1-te Wert des Vektors das Resultat (ohne unbekannte entspricht)\r\n * \r\n * Beispiel: F\u00fcr die Gleichung:\r\n *  2*x + 3*y + 1*z = 5 wird der Vektor: {2, 3, 1, 5} \u00fcbergeben, f\u00fcr die n\u00e4chste Zeile dann der n\u00e4chste Vector, usw.\r\n *  \r\n *  \r\n * @author carsten\r\n *\r\n *\/\r\npublic class GaussSolver {\r\n\r\n\t\r\n\t@SuppressWarnings(\"unchecked\")\r\n\tpublic static Vector solve(Vector... input) throws Exception {\r\n\t\tif (input.length == 0 || input.length < input[0].size()-1 || input.length >= input[0].size()) {\r\n\t\t\tthrow new IllegalArgumentException(\"Zur L\u00f6sung eines Gleichungssystems mit n unbekannten m\u00fcssen auch n Vektoren \u00fcbergeben werden!\");\r\n\t\t}\r\n\t\tint size = input.length;\r\n\t\t\/\/der erste Vektor bleibt erst einmal stehen\r\n\t\t\/\/start-Wert der Normalisierung\r\n\t\t\/\/wir fangen mit 1 an und z\u00e4hlen dann sp\u00e4ter weiter hoch!!\r\n\t\tfor (int i= 0; i< size; i++) {\r\n\t\t\tVector previousLine = input[i]; \/\/Vektor des entsprechenden Schritts holen = 0. Schritt =&gt; 0. Vektor\r\n\t\t\tDouble prevLineEl = previousLine.get(i); \/\/entsprechenden Spaltenwert holen = 0. Spalte bei 0. Schritt\r\n\r\n\t\t\t\/\/nun werden alle restlichen Vektoren durchgegangen\r\n\t\t\tfor (int j = i+1; j<size; j++) {\r\n\t\t\t\tVector line = input[j]; \/\/entsprechenden Vektor holen\r\n\t\t\t\tDouble elLine = line.elementAt(i); \/\/Wert der Spalte im Vektor des zugeh\u00f6rigen Schrittes holen\r\n\t\t\t\t\/\/Ermittlung des Faktors, mit dem die erste Zeile multipliziert wird \r\n\t\t\t\t\/\/um dann die entsprechende Zeile in der i. Spalte durch Addition nullen zu k\u00f6nnen\r\n\t\t\t\tdouble faktor = (-elLine.doubleValue()\/prevLineEl.doubleValue()); \r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\tfor (int k = i; k < line.size(); k++) {\r\n\t\t\t\t\tdouble element = line.get(k); \/\/nun alle Elemente des entsprechenden Vektors durchgehen\r\n\t\t\t\t\tdouble result = faktor*previousLine.get(k)+element; \/\/Faktor*Wert der i.Zeile + Wert der aktuellen Zeile\r\n\t\t\t\t\tline.set(k, result); \/\/und im Vektor aktualisieren!!\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t\/\/nun sollte die \"Matrix\" normalisiert sein \r\n\t\t\/\/jetzt gilt es noch die entsprechende Werte zu berechnen\r\n\t\t\/\/dieser Vector wird dann sp\u00e4ter zur\u00fcckgegeben\r\n\t\tVector resultVector = new Vector<>();\r\n\t\t\/\/erst mal initialisieren wir ihn mit 0-Werten in der Gr\u00f6\u00dfe der vorhandenen Variablen\r\n\t\tfor (int i=0; i< size; i++) { \r\n                   resultVector.add(0, 0.0); \r\n                } \r\n                \/\/nun gehen wir die Matrix von hinten durch \r\n                for (int i=size-1; i>=0; i--) {\r\n\t\t\tVector vect = input[i];\/\/ermitteln des zugeh\u00f6rigen Vektors\r\n\t\t\tdouble summe = 0.0; \/\/Zwischenelement summe initialisieren\r\n\t\t\t\/\/nun iterieren wir \u00fcber bereits alle schon ermittelten Resultate und multiplizieren diese \r\n\t\t\t\/\/mit den zugeh\u00f6rigen Werten in der Matrix\r\n\t\t\t\/\/beim ersten Durchlauf wird hier nix iteriert, da wir ja noch kein richtiges Ergebnis haben\r\n\t\t\tfor (int j=i+1; j<size;j++) {\r\n\t\t\t\tsumme += vect.get(j)*resultVector.get(j);\r\n\t\t\t}\r\n\t\t\t\/\/Zur Ermittlung des Wertes wird die letzte Spalte (absolutwert ohne Variable) um die Summe der\r\n\t\t\t\/\/bereits ermittelten reduziert und durch den entsprechenden Faktor in der Matrix dividiert\r\n\t\t\tif (vect.get(i) == 0) {\r\n\t\t\t\tthrow new Exception(\"Das Gleichungssystem ist nicht l\u00f6sbar!!\");\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tresultVector.set(i, (vect.get(size)-summe)\/vect.get(i));\r\n\t\t}\r\n\t\treturn resultVector;\r\n\t}\r\n}\r\n<\/pre>\n<p>Sicher k\u00f6nnte man die Eingabe-Parameter auch als double-Array \/ zweidimensionales double-Array machen, aber mir erscheint die L\u00f6sung mit den Vektoren einfacher, speziell die Bef\u00fcllung eines \/ mehrerer Vektoren ist bei weitem einfacher, als programmiertechnisch ein zweidimensionales Array zu erzeugen.<\/p>\n<p>Mit Hilfe des Gau\u00df-Algorithmus haben wir schon die halbe Miete. Wenn man folgende Vektoren \u00fcbergibt:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.cssec.de\/blog\/wp-content\/ql-cache\/quicklatex.com-c6a28b7b8d9818daa3ac1dd0de382ac1_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#123;&#49;&#44;&#32;&#45;&#120;&#95;&#123;&#48;&#125;&#44;&#32;&#45;&#121;&#95;&#123;&#48;&#125;&#44;&#32;&#45;&#40;&#120;&#95;&#123;&#48;&#125;&#94;&#123;&#50;&#125;&#43;&#121;&#95;&#123;&#48;&#125;&#94;&#123;&#50;&#125;&#41;&#92;&#125; &#92;&#123;&#49;&#44;&#32;&#45;&#120;&#95;&#123;&#49;&#125;&#44;&#32;&#45;&#121;&#95;&#123;&#49;&#125;&#44;&#32;&#45;&#40;&#120;&#95;&#123;&#49;&#125;&#94;&#123;&#50;&#125;&#43;&#121;&#95;&#123;&#49;&#125;&#94;&#123;&#50;&#125;&#41;&#92;&#125; &#92;&#123;&#49;&#44;&#32;&#45;&#120;&#95;&#123;&#50;&#125;&#44;&#32;&#45;&#121;&#95;&#123;&#50;&#125;&#44;&#32;&#45;&#40;&#120;&#95;&#123;&#50;&#125;&#94;&#123;&#50;&#125;&#43;&#121;&#95;&#123;&#50;&#125;&#94;&#123;&#50;&#125;&#41;&#92;&#125; \" title=\"Rendered by QuickLaTeX.com\" height=\"21\" width=\"587\" style=\"vertical-align: -6px;\"\/><\/p>\n<p>erh\u00e4lt man dann die Werte A, B und C.<br \/>\nFolgt man dann dem Schema auf der Seite von Arndt Br\u00fcnner kann man dann <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.cssec.de\/blog\/wp-content\/ql-cache\/quicklatex.com-a3fd8ec6f21c1926d24b54629ea792d6_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#120;&#95;&#123;&#109;&#125;\" title=\"Rendered by QuickLaTeX.com\" height=\"11\" width=\"22\" style=\"vertical-align: -3px;\"\/> und <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.cssec.de\/blog\/wp-content\/ql-cache\/quicklatex.com-a2127a9aea4321d9dd236bb8dfc6f708_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#121;&#95;&#123;&#109;&#125;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"21\" style=\"vertical-align: -4px;\"\/> mit folgenden Formeln ermitteln:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.cssec.de\/blog\/wp-content\/ql-cache\/quicklatex.com-36024110b66be088c40ca10872981905_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#32;&#120;&#95;&#123;&#109;&#125;&#32;&#61;&#32;&#92;&#102;&#114;&#97;&#99;&#123;&#66;&#125;&#123;&#50;&#125;\" title=\"Rendered by QuickLaTeX.com\" height=\"22\" width=\"61\" style=\"vertical-align: -6px;\"\/><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.cssec.de\/blog\/wp-content\/ql-cache\/quicklatex.com-56e60dc320eeeb73f06cbf101695c590_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#121;&#95;&#123;&#109;&#125;&#32;&#61;&#32;&#92;&#102;&#114;&#97;&#99;&#123;&#67;&#125;&#123;&#50;&#125;\" title=\"Rendered by QuickLaTeX.com\" height=\"22\" width=\"58\" style=\"vertical-align: -6px;\"\/><\/p>\n<p>und last but not least auch den Radius:<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.cssec.de\/blog\/wp-content\/ql-cache\/quicklatex.com-b8da6715a7bc9fa49ed430253b5a61cb_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#32;&#114;&#32;&#61;&#32;&#92;&#115;&#113;&#114;&#116;&#123;&#120;&#95;&#123;&#109;&#125;&#94;&#123;&#50;&#125;&#32;&#43;&#32;&#121;&#95;&#123;&#109;&#125;&#94;&#123;&#50;&#125;&#32;&#45;&#32;&#65;&#125;\" title=\"Rendered by QuickLaTeX.com\" height=\"22\" width=\"152\" style=\"vertical-align: -6px;\"\/><\/p>\n<p>Nun haben wir ja fast alles. Bis auf die Winkel....<\/p>\n<p>Gut, dass ich mich f\u00fcr den letzten Mathematik-Beitrag mal wieder etwas mit den Winkelfunktionen besch\u00e4ftigt hatte. Mit Hilfe dieser kann man dann die Winkel relativ einfach ausrechnen.<\/p>\n<p>F\u00fcr den Anfangswinkel nutzen wir einfach den Sinus-Satz. Wir erinnern uns:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.cssec.de\/blog\/wp-content\/ql-cache\/quicklatex.com-4633f03caf796a6d54745800f7bc675d_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#115;&#105;&#110;&#32;&#92;&#97;&#108;&#112;&#104;&#97;&#32;&#61;&#32;&#92;&#102;&#114;&#97;&#99;&#123;&#71;&#101;&#103;&#101;&#110;&#107;&#97;&#116;&#104;&#101;&#116;&#101;&#125;&#123;&#72;&#121;&#112;&#111;&#116;&#104;&#101;&#110;&#117;&#115;&#101;&#125;\" title=\"Rendered by QuickLaTeX.com\" height=\"26\" width=\"147\" style=\"vertical-align: -9px;\"\/><\/p>\n<p>Die Hypothenuse ist in unserem Fall dann der Radius, die Gegenkathete der Abstand zwischen <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.cssec.de\/blog\/wp-content\/ql-cache\/quicklatex.com-20bbf7cce56becf3ead8d7b10e74cb29_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#120;&#95;&#123;&#48;&#125;\" title=\"Rendered by QuickLaTeX.com\" height=\"11\" width=\"17\" style=\"vertical-align: -3px;\"\/> und <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.cssec.de\/blog\/wp-content\/ql-cache\/quicklatex.com-a3fd8ec6f21c1926d24b54629ea792d6_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#120;&#95;&#123;&#109;&#125;\" title=\"Rendered by QuickLaTeX.com\" height=\"11\" width=\"22\" style=\"vertical-align: -3px;\"\/>.<br \/>\nHier ergibt sich dann also:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.cssec.de\/blog\/wp-content\/ql-cache\/quicklatex.com-e19ed47307d24fd0bd9428b2500f7bd6_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#115;&#105;&#110;&#32;&#92;&#97;&#108;&#112;&#104;&#97;&#32;&#61;&#32;&#92;&#102;&#114;&#97;&#99;&#123;&#120;&#95;&#123;&#48;&#125;&#45;&#120;&#95;&#123;&#109;&#125;&#125;&#123;&#114;&#125;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"107\" style=\"vertical-align: -6px;\"\/><\/p>\n<p>Um auf den Anfangs-Winkel zu kommen nutzt man die Umkehrfunktion des Sinus, also den arcussin (asin)<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.cssec.de\/blog\/wp-content\/ql-cache\/quicklatex.com-3b7ae0452755141708f3e0c98aa34616_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#97;&#108;&#112;&#104;&#97;&#95;&#123;&#97;&#125;&#32;&#61;&#32;&#92;&#97;&#114;&#99;&#115;&#105;&#110;&#40;&#92;&#102;&#114;&#97;&#99;&#123;&#120;&#95;&#123;&#48;&#125;&#45;&#120;&#95;&#123;&#109;&#125;&#125;&#123;&#114;&#125;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"20\" width=\"150\" style=\"vertical-align: -6px;\"\/><\/p>\n<p>Der Endwinkel kann man dann analog ermitteln:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.cssec.de\/blog\/wp-content\/ql-cache\/quicklatex.com-04bf17e871dc64ee57c6eb2a8578ae33_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#97;&#108;&#112;&#104;&#97;&#95;&#123;&#101;&#125;&#32;&#61;&#32;&#92;&#97;&#114;&#99;&#115;&#105;&#110;&#40;&#92;&#102;&#114;&#97;&#99;&#123;&#120;&#95;&#123;&#50;&#125;&#45;&#120;&#95;&#123;&#109;&#125;&#125;&#123;&#114;&#125;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"20\" width=\"149\" style=\"vertical-align: -6px;\"\/><\/p>\n<p>Hier ist darauf zu achten, wenn man die Winkel wirklich f\u00fcr eine DXF-Generierung einsetzen m\u00f6chte, dass an dieser Stelle komischerweise Anfangs- und Endwinkel vertauscht sind.\u00a0 Erzeugt man die, so wie man sich das eigentlich vorstellen w\u00fcrde, wird der Bogen lustigerweise umgedreht. Wenn man das wei\u00df, ist das aber kein Problem.<\/p>\n<p>Mit Hilfe dieser Sachen konnte ich dann in meinem Projekt aus einem XML-Dokument Polygonz\u00fcge auslesen, mit Hilfe der Formeln umwandeln und mit ein paar Freemarker-Templates f\u00fcr ein DXF-Dokument und die entsprechenden DXF-Entities ein im CAD und im Shop lesbares DXF erzeugen.<\/p>\n<p>Ich h\u00e4tte nie gedacht, mal irgendwann was mathematisches aus meiner Studienzeit wieder auskramen zu m\u00fcssen. Aber ist schon interessant, wie\u00a0 das Leben so spielt.<\/p>\n<h4>Update 14.05.:<\/h4>\n<p>So einfach ist dann das mit den Start- und Endwinkeln wohl doch nicht. Das Problem ist, dass die Vertauschung von Start- und Endwinkeln nur in bestimmten Situationen anwendbar ist, au\u00dferdem ist in bestimmten F\u00e4llen auch die Subtraktion der Winkel von 360\u00b0 notwendig.<\/p>\n<p>Durch mehrfaches Trial &amp; Error konnte ich folgende Gesetzm\u00e4\u00dfigkeiten erkennen:<\/p>\n<p>Vertauscht werden Anfangs- und Endwinkel bei folgenden Situationen:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.cssec.de\/blog\/wp-content\/ql-cache\/quicklatex.com-a9b1c35ad8fbef6124d6b4ce9faf3c9b_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#120;&#95;&#123;&#109;&#125;&#32;&#60;&#32;&#120;&#95;&#123;&#49;&#125;&#44;&#32;&#121;&#95;&#123;&#109;&#125;&#32;&#62;&#61;&#32;&#121;&#95;&#123;&#49;&#125;&#44;&#32;&#120;&#95;&#123;&#50;&#125;&#32;&#45;&#32;&#120;&#95;&#123;&#48;&#125;&#32;&#62;&#61;&#32;&#48;&#44;&#32;&#121;&#95;&#123;&#50;&#125;&#32;&#45;&#32;&#121;&#95;&#123;&#48;&#125;&#32;&#62;&#61;&#32;&#48;&#32;\" title=\"Rendered by QuickLaTeX.com\" height=\"16\" width=\"368\" style=\"vertical-align: -4px;\"\/><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.cssec.de\/blog\/wp-content\/ql-cache\/quicklatex.com-767fc1cc5c142745ace3c3954d10079a_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#120;&#95;&#123;&#109;&#125;&#32;&#62;&#61;&#32;&#120;&#95;&#123;&#49;&#125;&#44;&#32;&#121;&#95;&#123;&#109;&#125;&#32;&#60;&#32;&#121;&#95;&#123;&#49;&#125;&#44;&#32;&#120;&#95;&#123;&#50;&#125;&#32;&#45;&#32;&#120;&#95;&#123;&#48;&#125;&#32;&#60;&#32;&#48;&#44;&#32;&#121;&#95;&#123;&#50;&#125;&#32;&#45;&#32;&#121;&#95;&#123;&#48;&#125;&#32;&#60;&#32;&#48;&#32;\" title=\"Rendered by QuickLaTeX.com\" height=\"16\" width=\"341\" style=\"vertical-align: -4px;\"\/> <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.cssec.de\/blog\/wp-content\/ql-cache\/quicklatex.com-36d2497c5d5c5f7bd8a60936c8672283_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#120;&#95;&#123;&#109;&#125;&#32;&#62;&#61;&#32;&#120;&#95;&#123;&#49;&#125;&#44;&#32;&#121;&#95;&#123;&#109;&#125;&#32;&#62;&#61;&#32;&#121;&#95;&#123;&#49;&#125;&#44;&#32;&#120;&#95;&#123;&#50;&#125;&#32;&#45;&#32;&#120;&#95;&#123;&#48;&#125;&#32;&#62;&#61;&#32;&#48;&#44;&#32;&#121;&#95;&#123;&#50;&#125;&#32;&#45;&#32;&#121;&#95;&#123;&#48;&#125;&#32;&#60;&#32;&#48;&#32;\" title=\"Rendered by QuickLaTeX.com\" height=\"16\" width=\"368\" style=\"vertical-align: -4px;\"\/><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.cssec.de\/blog\/wp-content\/ql-cache\/quicklatex.com-f42a06c89d46aeeb3c8fea5a897e335b_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#120;&#95;&#123;&#109;&#125;&#32;&#60;&#32;&#120;&#95;&#123;&#49;&#125;&#44;&#32;&#121;&#95;&#123;&#109;&#125;&#32;&#60;&#32;&#121;&#95;&#123;&#49;&#125;&#44;&#32;&#120;&#95;&#123;&#50;&#125;&#32;&#45;&#32;&#120;&#95;&#123;&#48;&#125;&#32;&#60;&#32;&#48;&#44;&#32;&#121;&#95;&#123;&#50;&#125;&#32;&#45;&#32;&#121;&#123;&#48;&#125;&#32;&#62;&#61;&#32;&#48;&#32;\" title=\"Rendered by QuickLaTeX.com\" height=\"16\" width=\"342\" style=\"vertical-align: -4px;\"\/><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.cssec.de\/blog\/wp-content\/ql-cache\/quicklatex.com-750b2802db6e6b6dbfba63c2677ebb42_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#120;&#95;&#123;&#109;&#125;&#32;&#62;&#61;&#32;&#120;&#95;&#123;&#49;&#125;&#44;&#32;&#121;&#95;&#123;&#109;&#125;&#32;&#60;&#32;&#121;&#95;&#123;&#49;&#125;&#44;&#32;&#120;&#95;&#123;&#50;&#125;&#32;&#45;&#32;&#120;&#95;&#123;&#48;&#125;&#32;&#60;&#32;&#48;&#44;&#32;&#121;&#95;&#123;&#50;&#125;&#32;&#45;&#32;&#121;&#123;&#48;&#125;&#32;&#62;&#61;&#32;&#48;&#32;\" title=\"Rendered by QuickLaTeX.com\" height=\"16\" width=\"356\" style=\"vertical-align: -4px;\"\/><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.cssec.de\/blog\/wp-content\/ql-cache\/quicklatex.com-b2a08ae829ec6e14f8d885f8b48acbc7_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#120;&#95;&#123;&#109;&#125;&#32;&#60;&#32;&#120;&#95;&#123;&#49;&#125;&#44;&#32;&#121;&#95;&#123;&#109;&#125;&#32;&#62;&#61;&#32;&#121;&#95;&#123;&#49;&#125;&#44;&#32;&#120;&#95;&#123;&#50;&#125;&#32;&#45;&#32;&#120;&#95;&#123;&#48;&#125;&#32;&#60;&#32;&#48;&#44;&#32;&#121;&#95;&#123;&#50;&#125;&#32;&#45;&#32;&#121;&#123;&#48;&#125;&#32;&#62;&#61;&#32;&#48;&#32;\" title=\"Rendered by QuickLaTeX.com\" height=\"16\" width=\"356\" style=\"vertical-align: -4px;\"\/><\/p>\n<p>In diesem Fall werden Anfangs- und Endwinkel getauscht. Zumindest in meinen Beispielen hat das soweit funktioniert.<\/p>\n<p>Abschlie\u00dfend gibt es noch F\u00e4lle, in denen der Winkel von 360\u00b0 subtrahiert wird:<\/p>\n<p>Der Anfangswinkel wird von 360\u00b0 abgezogen, wenn die Tauschung von Anfangs- und Endwinkel vorgenommen wurde und :<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.cssec.de\/blog\/wp-content\/ql-cache\/quicklatex.com-0661655234d90c5f48e79310e0d6f1ba_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#32;&#121;&#95;&#123;&#109;&#125;&#32;&#62;&#32;&#121;&#95;&#123;&#48;&#125;&#32;\" title=\"Rendered by QuickLaTeX.com\" height=\"15\" width=\"61\" style=\"vertical-align: -4px;\"\/><br \/>\noder wenn keine Tauschung vorgenommen wurde:<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.cssec.de\/blog\/wp-content\/ql-cache\/quicklatex.com-02648a7e415ceb6173919aec7045e224_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#32;&#121;&#95;&#123;&#109;&#125;&#32;&#62;&#32;&#121;&#95;&#123;&#50;&#125;&#32;\" title=\"Rendered by QuickLaTeX.com\" height=\"15\" width=\"61\" style=\"vertical-align: -4px;\"\/><\/p>\n<p>Der Endwinkel wird von 360\u00b0 abgezogen, wenn die Tauschung vorgenommen wurde und:<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.cssec.de\/blog\/wp-content\/ql-cache\/quicklatex.com-02648a7e415ceb6173919aec7045e224_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#32;&#121;&#95;&#123;&#109;&#125;&#32;&#62;&#32;&#121;&#95;&#123;&#50;&#125;&#32;\" title=\"Rendered by QuickLaTeX.com\" height=\"15\" width=\"61\" style=\"vertical-align: -4px;\"\/><br \/>\noder wenn keine Tauschung vorgenommen wurde:<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.cssec.de\/blog\/wp-content\/ql-cache\/quicklatex.com-dbf3f291b23a9175fb52c880f097c1cb_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#32;&#121;&#95;&#123;&#109;&#125;&#32;&#62;&#32;&#121;&#95;&#123;&#48;&#125;\" title=\"Rendered by QuickLaTeX.com\" height=\"15\" width=\"61\" style=\"vertical-align: -4px;\"\/><\/p>\n<p>Nach Einbau dieser Sonderlocken konnte ich dann aus vorgegebenen Konturen auch eine passende DXF erzeugen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hallo da drau\u00dfen, heute mal ein l\u00e4ngerer Beitrag, der mal wieder aus einem Projekt entstanden ist. Aktuell entwickle ich einige Dinge am Laserteile-Shop &#8211; es wird demn\u00e4chst einen sehr speziellen Ableger geben, viel mehr darf ich aber nicht verraten. Im Zuge der Umsetzung sind einige geometrische Dinge umzuwandeln. Bisher bin ich da relativ verschont geblieben, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":374,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,44],"tags":[],"_links":{"self":[{"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/posts\/364"}],"collection":[{"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/comments?post=364"}],"version-history":[{"count":22,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/posts\/364\/revisions"}],"predecessor-version":[{"id":448,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/posts\/364\/revisions\/448"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/media\/374"}],"wp:attachment":[{"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/media?parent=364"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/categories?post=364"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/tags?post=364"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}