Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Punkt links oder rechts von Kontur

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:   Punkt links oder rechts von Kontur (1437 mal gelesen)
Andi L
Mitglied


Sehen Sie sich das Profil von Andi L an!   Senden Sie eine Private Message an Andi L  Schreiben Sie einen Gästebucheintrag für Andi L

Beiträge: 8
Registriert: 27.11.2003

ACAD 2002

erstellt am: 25. Jul. 2004 11:18    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13435
Registriert: 30.11.2003

.

erstellt am: 25. Jul. 2004 12:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andi L 10 Unities + Antwort hilfreich

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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


Sehen Sie sich das Profil von Andi L an!   Senden Sie eine Private Message an Andi L  Schreiben Sie einen Gästebucheintrag für Andi L

Beiträge: 8
Registriert: 27.11.2003

ACAD 2002

erstellt am: 25. Jul. 2004 20:30    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


test.zip


Offset.JPG

 
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.


Sehen Sie sich das Profil von Geos an!   Senden Sie eine Private Message an Geos  Schreiben Sie einen Gästebucheintrag für Geos

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andi L 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von Dabrunz an!   Senden Sie eine Private Message an Dabrunz  Schreiben Sie einen Gästebucheintrag für Dabrunz

Beiträge: 127
Registriert: 28.05.2003

erstellt am: 26. Jul. 2004 12:14    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andi L 10 Unities + Antwort hilfreich


is_offset_right.zip

 
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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2020 CAD.de | Impressum | Datenschutz