| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | | | PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
|
Autor
|
Thema: Punkt links oder rechts von Kontur (1738 mal gelesen)
|
Andi L Mitglied
Beiträge: 8 Registriert: 27.11.2003 ACAD 2002
|
erstellt am: 25. Jul. 2004 11:18 <-- editieren / zitieren --> Unities abgeben:
Hi allerseits, Wie kann ich feststellen, ob ein gegebener Punkt LINKS oder RECHTS von einer LWPOLYLINE liegt ? Die Kontur kann offen oder geschlossen sein, jedoch nicht selbstschneidend. Hat jemand eine Idee, oder eine Funktion dafür ? Grüße Andi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 25. Jul. 2004 12:54 <-- editieren / zitieren --> Unities abgeben: Nur für Andi L
Links und Rechts ist etwas sehr schwammig, und bezüglich einer Polylinie sowieso! Aber Vielleicht reicht dir ja schon der Ansatz L ist das Polylinien-Objekt , P der Punkt. mit (vlax-curve-getClosestPointTo (vlax-ename->vla-object L) P) den nächsten Punkt auf der Polylinie bezüglich P bestimmen, und wenn x-Wert von P kleiner ist als der von ClosestPointTo zurückgelieferte, dann liegt P "Links" -> Schwammige Antwort aud schwammige Frage! ------------------ - Thomas - Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 25. Jul. 2004 15:12 <-- editieren / zitieren -->
Zitat: Original erstellt von Andi L: Wie kann ich feststellen, ob ein gegebener Punkt LINKS oder RECHTS von einer LWPOLYLINE liegt ? Die Kontur kann offen oder geschlossen sein, jedoch nicht selbstschneidend.
Ein Punkt liegt immer rechts UND :-) links von einer Linie, wenn er nicht gerade exakt auf der Linie liegt. Rechts und links hängen von der Blickrichtung des Betrachters ab und nicht von der Lage des Punkts. Du meinst vermutlich, ob ein Punkt INNERHALB oder AUSSERHALB einer Kontur liegt. Dies wurde hier schon ausführlich diskutiert mitsamt Lösungsansätzen, die auch bei selbstüberschneidenden Konturen funktionieren. Hier kannst Du mehr darüber lesen: http://ww3.cad.de/foren/ubb/Forum145/HTML/000602.shtml Tom Berger ------------------
|
Andi L Mitglied
Beiträge: 8 Registriert: 27.11.2003 ACAD 2002
|
erstellt am: 25. Jul. 2004 20:30 <-- editieren / zitieren --> Unities abgeben:
Hi Sorry, links/rechts ist natürlich etwas schwammig ausgedrückt. Ich meine damit links/rechts einer PLINE in Abhängigkeit der Laufrichtung. Den genannten Beitrag kenne ich, aber dabei geht es um innen/außen. Innen/außen und die Laufrichtung von geschlossenen Konturen kann ich bestimmen. Mein Problem betrifft hauptsächlich offene Konturen, da ist inne/außen ja ziemlicher Käse. Die Unterscheidung brauche ich für eine spezielle Offsetroutine, um Punkte (bzw. Teilsegmente) die nicht auf die richtigen Seite der Kontur liegen zu erkennen. Bei geschlossenen Konturen funzt es mit innen/außen bestens, aber offene Konturen funzen logischerweise nicht. Mittlerweilen habe ich eine Möglichkeit gefunden, aber die ist 100%ig. Mit vlax-...closestPoint... projeziere ich meinen Punkt auf die Kontur und mit vlax-...getfirstderiv... wird der Steigungsvektor in diesem Punkt bestimmt. Daraus berechne ich den Winkel zwischen dem Steigungsvektor und dem Vektor Closestpoint->Testpunkt. Anhand des Winkels kann man dann links/rechts unterscheiden. ABER: Bei scharfkantigen Außenecken gibt es manchmal Fehler !!! Bis jetzt bin ich noch nicht dahinter gekommen woran das liegt. Irgendwie steh ich da auf dem Schlauch.... Ich habe eine Beispielzeichnung und die LISP-Routine dem Beitrag angehängt. Vielleicht könnt Ihr es Euch mal angucken ? Die LISP-Datei ist etwas länger, wegen der BIBO's. Einfach mit 'TEST' starten, die Kontur anklicken, dann mit dem Fadenkreuz um die Kontur herumfahren und beobachten wie sich die Offsetrichtung ändert. Im Bereich des blauen Kreises wird plötzlich die Richtung umgedreht. Hat da jemand eine Idee ??? Grüße Andi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 26. Jul. 2004 08:30 <-- editieren / zitieren --> Unities abgeben: Nur für Andi L
Servus Vielleicht kannst damit was anfangen die Funktion prüft, ob der Punkt #pkt3 links der Geraden #pkt1 - #pkt2 liegt ---------------------Code---- (defun pktlinks? (#pkt1 #pkt2 #pkt3 / ) (if (> (* (- (car #pkt2) (car #pkt1)) (- (cadr #pkt3) (cadr #pkt1))) (* (- (cadr #pkt2) (cadr #pkt1)) (- (car #pkt3) (car #pkt1))) ) t ;Punkt links nil ;Punkt rechts ) ) ---------------------Code Ende---- ich glaube, die habe ich auch in einem Forum gefunden (zumindest ansatzweise) ------------------ Gruß, Ernst Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dabrunz Mitglied
Beiträge: 127 Registriert: 28.05.2003
|
erstellt am: 26. Jul. 2004 12:14 <-- editieren / zitieren --> Unities abgeben: Nur für Andi L
Tag zusammen. Zitat:
Mein Problem betrifft hauptsächlich offene Konturen, da ist inne/außen ja ziemlicher Käse.
Nein - ist prinzipiell das gleiche. Bei einer geschlossen Kurve, die hinreichend gutartig (das schließt insbes. sich selbst schneidende Kurven aus) ist, liegen innere Punkte, abh. von der Laufrichtung IMMER "links" oder "rechts" der Kurve. Also muss die Kurve nur als "geschlossen betrachtet werden - oder? Zitat:
Mittlerweilen habe ich eine Möglichkeit gefunden, aber die ist 100%ig.<snip - Beschreibung des Verfahrens> ABER: Bei scharfkantigen Außenecken gibt es manchmal Fehler !!! Bis jetzt bin ich noch nicht dahinter gekommen woran das liegt. Irgendwie steh ich da auf dem Schlauch....
Wohl doch nicht ganz 100%, wie es scheint. Ich habe nun dein Verfahren nicht en detail angescchaut, aber es dürfte darauf hinaus laufen, zu prüfen, ob die 3 Punkte <P>, <Projektion von P auf die Kurve> und <Vortsetzung der Projektion in Tangenten-Richtung> im UhrzeigerSinn -> rechts angeordnet sind oder nicht. Hierfür sind aber die Voraussetzungen nicht erfüllt, wenn die Kurve nicht glatt ist! In deinen Ecken ist die Tangente an die Kurve nicht einfach zu definieren. AutoCAD verwendet hier offensichtlich immer den Tangenten-Vektor des nachfolgenden Kurven-Segments, was durchaus zulässig ist, denn in den Ecken muss er ja willkürlich festgelegt werden, denn die Tangente des vorherigen Segments weicht ja ab. Dein Verfahren kann also nicht funktionierne, wenn nicht alle Kurvern-Segmente tangential ineinander münden. Ich habe die Beispielzeichnung einmal mit einer Schraffur des kritischen Bereichs der von dir betrachteten Ecke versehen, in dem dein Verfahren scheitern muss. den Bereeich darst du gerne beliebig weit noch "oben" forsetzen, da klappt's dann auch nicht. Achim Dabrunz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|