Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Schnittpunkt ohne Geometrie

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
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Schnittpunkt ohne Geometrie (3770 mal gelesen)
Bernd10
Mitglied



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

Beiträge: 763
Registriert: 20.11.2003

Intel(R) Xeon(R) W-2123 CPU @ 3.60GHz
16 GB RAM
Windows 10 Pro 64-bit
AutoCAD Mechnical 2020 Deu

erstellt am: 01. Aug. 2011 10:28    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

Hallo,

ich möchte den Schnittpunkt einer Linie und einem Kreisbogen berechnen, jedoch ohne dass die Objekte vorhanden sind. Wären diese vorhanden, könnte ich es wie im Beitrag http://ww3.cad.de/foren/ubb/Forum145/HTML/000302.shtml  machen. Wären es zwei Linien würde die Lisp-Funktion (inters lpkt1s lpkt1e lpkt2s lpkt2e nil) funktionieren. Folglich suche ich eine ähnliche Lisp-Funktion zu inters, die aber den Schnittpunkt einer Linie und einem Kreisbogen berechnet.

Diese Werte sind mir bekannt:
- Startpunkt Linie
- Endpunkt Linie
- Radius Kreisbogen
- Startpunkt Kreisbogen
- Endpunkt Kreisbogen
- Zentrum Kreisbogen

Wie kann ich den Schnittpunkt einer Linie und einem Kreisbogen ohne vorhandene Objekte ermitteln?

Danke im Voraus und viele Grüße
Bernd

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

tunnelbauer
Ehrenmitglied V.I.P. h.c.
Bauingenieur



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

Beiträge: 7085
Registriert: 13.01.2004

ich hab eh keine Probleme damit...

erstellt am: 01. Aug. 2011 10:46    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 Bernd10 10 Unities + Antwort hilfreich

Bernd10
Mitglied



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

Beiträge: 763
Registriert: 20.11.2003

Intel(R) Xeon(R) W-2123 CPU @ 3.60GHz
16 GB RAM
Windows 10 Pro 64-bit
AutoCAD Mechnical 2020 Deu

erstellt am: 01. Aug. 2011 11: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

Hallo Thomas,

danke für Deine Antwort.

 

Zitat:
Original erstellt von tunnelbauer:

Welchen der beiden Schnittpunkte?

Wenn ich alle Schnittpunkte hätte, könnte ich vielleicht durch eine weitere Analyse meinen gewünschten Schnittpunkt herausfinden.

 

Zitat:
Original erstellt von tunnelbauer:

Siehe: http://www.unet.univie.ac.at/~a9907818/kreisund.htm 
http://de.answers.yahoo.com/question/index?qid=20081204075108AABfb0U 

Das übersteigt meine Mathe-Kenntnisse. Ich verstehe zwar noch, dass es die drei Fälle geben kann, aber dann ist es vorbei mit meinem Verständnis. Eine Umsetzung in eine Lisp-Funktion ist mir deshalb leider nicht möglich.

Viele Grüße
Bernd

[Diese Nachricht wurde von Bernd10 am 01. Aug. 2011 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

tunnelbauer
Ehrenmitglied V.I.P. h.c.
Bauingenieur



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

Beiträge: 7085
Registriert: 13.01.2004

ich hab eh keine Probleme damit...

erstellt am: 01. Aug. 2011 11:56    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 Bernd10 10 Unities + Antwort hilfreich

Ich hab jetzt noch ein bisschen weiter gegoogled...
http://www.mario-konrad.ch/index.php?page=10200  - Das PDF "Intersection" enthält bereits die Programmierung in "C" Source-Code...


Einfacher wirds dann hier... 
http://paulbourke.net/geometry/sphereline/  (gibt es den Lisp-Code bereits...)

bzw hier:
http://forums.autodesk.com/t5/Visual-LISP-AutoLISP-and-General/Intersection-between-line-and-circle/td-p/831902

------------------
Grüsse

Thomas

Korrekturen zum Kochbuch AutoLISP

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

archtools
Mitglied



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

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 01. Aug. 2011 11:59    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 Bernd10 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Bernd10:
Hallo Thomas,

danke für Deine Antwort.

  Das übersteigt meine Mathe-Kenntnisse. Ich verstehe zwar noch, dass es die drei Fälle geben kann, aber dann ist es vorbei mit meinem Verständnis. Eine Umsetzung in eine Lisp-Funktion ist mir deshalb leider nicht möglich.

Viele Grüße
Bernd


[Diese Nachricht wurde von Bernd10 am 01. Aug. 2011 editiert.]


1. Zentrum des Kreises berechnen
2. Normalvektor vom Zentrum des Kreises auf die Linie ermitteln
3. Schnittpunkt der Linie, die der  Normalvektor bildet, mit der Schnittlinie ermitteln
4. Abstand zwischen Zentrum und diesem Schnittpunkt ermitteln

Aus dem Vergleich dieses ermittelten Abstands und dem Kreisradius kannst Du erkennen, um welchen der drei Fälle es sich handelt. Aus dem Verhältnis dieses Abstands und des Radius kannst Du auch die eventuellen Schnittpunkte der Schnittlinie mit dem Kreis ermitteln (Stichwort: Fasskreisbogen).

Falls Dir die Mathematik zu kompliziert ist, dann hilft Dir GEOMCAL weiter. Im deutschen AutoCAD einfach die Hilfe zum Befehl "KAL" aufrufen, und dort z.B. nach "Abstand zwischen Punkt und Linie" suchen.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

neurosis
Mitglied
dipl.ing.


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

Beiträge: 222
Registriert: 22.08.2006

erstellt am: 01. Aug. 2011 12:06    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 Bernd10 10 Unities + Antwort hilfreich

hallo bernd,
gegeben ist
p1, p2 von linie
p1, p2, cp, radius von bogen

fuer die schnittpunktbetrachtung einer liene mit einem bogen benoetigst du erstmal die schnittpunkte der geraden y=mx+b mit dem kreis x²+y²=r².
als erstes tranferierst du die linienpunkte in das lokale koordinatensystem (ks) des kreises (zentrumspunkt kreis 0,0).
wenn die x-werte der 2 punkte der geraden identisch sind, drehst du das ks um 90°, da der anstieg "m" bei 90° bzw. 270° unendlich ist.
dann berechnest du "b" (Abstand auf der y-Achse des lokalen ks) mit

Code:
(setq b (inters p1 p2 '(0.0 0.0) '(0.0 1000.0) nil))

und dann den anstieg "m" mit
Code:
(setq m (/ (- (cadr p2) (cadr p1)) (- (car p2) (car p1))))

und dann die diskiminante "D"
Code:
(setq D (- (* (* radius radius) (1+ (* m m))) (* b b)))

wenn D < 0 -> keine schnittpunkte -> fertig
wenn D >= 0, dann
Code:

(setq x1 (/ (+ (* -1 m b) (sqrt D)) (1+ (* m m))))
(setq x2 (/ (- (* -1 m b) (sqrt D)) (1+ (* m m))))
(setq y1 (/ (+ b (* m (sqrt D))) (1+ (* m m))))
(setq y2 (/ (- b (* m (sqrt D))) (1+ (* m m))))


bei D=0 ist x1 = x und y1 = y2
jetzt noch die koordinaten zuruecktransferieren (wenn du am anfang das ks auch drehen musstest, musst du es jetzt natuerlich auch zurueckdrehen) und du hast die schnittpunkte in deinem globalen ks.

nun kannst du dich um die schnittpunkte auf dem bogen ueber winkelbeziehungen kuemmern. dabei muss du auch wieder 3 faelle unterscheiden: 0, 1 oder 2 schnittpunkte

------------------
Marco Heuer
www.arc-aachen.de
Airport Office

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Bernd10
Mitglied



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

Beiträge: 763
Registriert: 20.11.2003

Intel(R) Xeon(R) W-2123 CPU @ 3.60GHz
16 GB RAM
Windows 10 Pro 64-bit
AutoCAD Mechnical 2020 Deu

erstellt am: 01. Aug. 2011 14:42    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

Hallo Thomas,

danke für Deine Informationen.

Zitat:
Original erstellt von tunnelbauer:

http://forums.autodesk.com/t5/Visual-LISP-AutoLISP-and-General/ Intersection-between-line-and-circle/td-p/831902

Die Lisp-Funktionen in diesem Beitrag berechnen den von mir gesuchten Schnittpunkt. Ich verstehe zwar nicht nicht wie das passiert, aber ich werde es mir noch genauer ansehen.

Viele Grüße
Bernd

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Bernd10
Mitglied



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

Beiträge: 763
Registriert: 20.11.2003

Intel(R) Xeon(R) W-2123 CPU @ 3.60GHz
16 GB RAM
Windows 10 Pro 64-bit
AutoCAD Mechnical 2020 Deu

erstellt am: 01. Aug. 2011 14:59    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

Hallo archtools,

danke für Deine Antwort.

Zitat:
Original erstellt von archtools:

Falls Dir die Mathematik zu kompliziert ist, dann hilft Dir GEOMCAL weiter. Im deutschen AutoCAD einfach die Hilfe zum Befehl "KAL" aufrufen, und dort z.B. nach "Abstand zwischen Punkt und Linie" suchen.

Ich habe den von Dir genannten Punkt beim Befehl Kal in der AutoCad-Hilfe nicht gefunden. Allerdings steht bei Befehle > K -Befehle > KAL > Ermitteln eines Schnittpunktes die Funktion ilp.

Muss ich diese Funktion für den von Dir genannten Ablauf verwenden?

Viele Grüße
Bernd

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

archtools
Mitglied



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

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 01. Aug. 2011 17:37    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 Bernd10 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Bernd10:
Hallo archtools,

danke für Deine Antwort.

Ich habe den von Dir genannten Punkt beim Befehl Kal in der AutoCad-Hilfe nicht gefunden. Allerdings steht bei Befehle > K -Befehle > KAL > Ermitteln eines Schnittpunktes die Funktion ilp.

Muss ich diese Funktion für den von Dir genannten Ablauf verwenden?

Viele Grüße
Bernd


Such' noch ein bißchen weiter - am besten, Du liest Dir erst mal alle vordefinierten Funktionsnamen durch, damit Du überhaupt weisst, was es alles gibt. Mit DPL (DISTANCE from POINT to LINE) dürftest Du den Großteil der benötigten Information schon haben.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Bernd10
Mitglied



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

Beiträge: 763
Registriert: 20.11.2003

Intel(R) Xeon(R) W-2123 CPU @ 3.60GHz
16 GB RAM
Windows 10 Pro 64-bit
AutoCAD Mechnical 2020 Deu

erstellt am: 02. Aug. 2011 09:59    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


SchnPkt.JPG

 
Hallo Marco,

danke für Deine Antwort.

Ich bin mit dem unten stehenden Programmcode soweit, dass ich den Schnittpunkt einer Geraden zum Kreisbogen berechnen kann. Zum Verständnis ist in der Anlage ein Bild enthalten. Ich möchte dabei den Schnittpunkt der schwarze Linie mit dem schwarzen Kreisbogen ermitteln. Die gelbe Linie ergibt sich aus dem Zentrum des Kreisbogen und dem berechneten Schnittpunkt einer Geraden mit dem folgenden Programmcode.

( defun schnpkt_kreis_linie ( lkbzentrum rradius llinspkt llinepkt
                              /
                                        lzentbrg lschnpkt lschnpktbrg
rabst rradius2 rwinkelbm rxkoor rxkoor2 rydelta
rykoor )

; Den Schnittpunkt für das Zentrum (0.0 0.0 0.0) berechnen 
  (setq lzentbrg (list 0.0 0.0 0.0))
  (setq rradius2 (expt rradius 2))
  (setq rxkoor (xdelta_ermitteln llinspkt lkbzentrum))
  (setq rxkoor2 (expt rxkoor 2))
  (setq rykoor (sqrt (abs (- rradius2 rxkoor2)))) ; Formel bei Zentrum (0.0 0.0 0.0)
  (setq rydelta (ydelta_ermitteln llinspkt lkbzentrum))
  (if (< rydelta 0.0)          ; Y-Koordinate des Punktes kleiner als die Y-Koordinate
    (setq rykoor (* rykoor -1)) ; des Zentrumes des Kreis(bogen)bogens -> unterer Schnittpunkt
  ) ; if
  (setq lschnpktbrg (list rxkoor rykoor 0.0))

;
; Hier fehlt noch etwas...

; Den Schnittpunkt für das tatsächliche Zentrum berechnen
  (setq rabst (distance lzentbrg lkbzentrum))
  (setq rwinkelbm (angle lzentbrg lkbzentrum))
  (setq lschnpkt (polar lschnpktbrg rwinkelbm rabst))

; Rückgabewert
  lschnpkt

) ; Modulende 

Mir fehlt nun noch die Berücksichtigung, dass meine Linie keine Gerade ist. Leider kann ich nicht erkennen, wie ich Deine Codezeilen in meine Funktion übernehemn muss.

Kannst Du mir da weiterhelfen?

Viele Grüße
Bernd

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

neurosis
Mitglied
dipl.ing.


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

Beiträge: 222
Registriert: 22.08.2006

erstellt am: 02. Aug. 2011 11:35    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 Bernd10 10 Unities + Antwort hilfreich

also nochmal (zusammenhaengend, nix anderes steht auch oben)
gegeben ist
pt1, pt2 von linie
cp, rad von kreis

das code-schnipsel ist fuer das lokale koordinatensystem des kreises mit cp(x,y) = 0,0.
es wird nicht der sonderfall x(pt1) = x(pt2) beruecksichtigt (m->oo), dafuer muss noch das koordinatensystem gedreht werden.

berechnet werden wirkliche und virtuelle schnittpunkte einer linie mit einem kreis (in deinem bsp. wuerde es sich um einen virtuellen schnittpunkt handeln).

Code:

  (if (setq b (cadr (inters pt1 pt2 '(0.0 0.0) '(0.0 1000.0) nil)))
    (progn
      (setq m (/ (- (cadr pt2) (cadr pt1)) (- (car pt2) (car pt1))))
      ; Diskriminante D = r² * (1 + m²) - b²
      ; D>0 -> Kreis wird in zwei Punkten geschnitten
      ; D=0 -> Kreis wird in einem Punkten berührt
      ; D<0 -> Kreis wird von Gerade gemieden
      (setq D (- (* (* rad rad) (1+ (* m m))) (* b b)))
      (if (equal D 0.0 0.0001) (setq D 0.0))
      (if (>= D 0.0)
        (progn
          (setq x1 (/ (+ (* -1 m b) (sqrt D)) (1+ (* m m))))
          (setq x2 (/ (- (* -1 m b) (sqrt D)) (1+ (* m m))))
          (setq y1 (/ (+ b (* m (sqrt D))) (1+ (* m m))))
          (setq y2 (/ (- b (* m (sqrt D))) (1+ (* m m))))
        )
        nil
      )
    )
    nil
  )

------------------
Marco Heuer
www.arc-aachen.de
Airport Office

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Bernd10
Mitglied



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

Beiträge: 763
Registriert: 20.11.2003

Intel(R) Xeon(R) W-2123 CPU @ 3.60GHz
16 GB RAM
Windows 10 Pro 64-bit
AutoCAD Mechnical 2020 Deu

erstellt am: 02. Aug. 2011 16:04    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


schnpkt_kreis_linie.lsp.txt

 
Hallo,

hier meine Lisp-Funktion, mit der ich nun beginne meine Fälle zu testen.

Danke an alle für die super Unterstützung und viele Grüße
Bernd

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)2023 CAD.de | Impressum | Datenschutz