AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Schnittpunkt Linie vs. Kreis

Ein Thema von Namenloser · begonnen am 25. Mär 2009 · letzter Beitrag vom 15. Okt 2012
Antwort Antwort
Seite 2 von 2     12
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#11

Re: Schnittpunkt Linie vs. Kreis

  Alt 2. Mai 2009, 05:05
Zitat von Uwe Raabe:
Zitat:
// Gerade: P0 Punkt auf der Geraden, m: Steigung
Und wie gibt man damit eine Senkrechte an?
Indem man trickst und das Koordinatensystem um 90° dreht (so habe ich es gemacht, s.o.).
  Mit Zitat antworten Zitat
Draos

Registriert seit: 12. Aug 2008
42 Beiträge
 
Delphi 7 Enterprise
 
#12

Re: Schnittpunkt Linie vs. Kreis

  Alt 2. Mai 2009, 11:21
Oder man hat mal was in Mathe von Analytik gehört und löst das Problem über Vektoren.

k: [vx-vm]²=r²

g: vx=vn+s*va

mit
vm.. Ortsvektor des Kreismittelpunktes
vn.. Stützvektor der Geraden
va.. Richtungsvektor der Geraden


1. Gleichsetzten der beiden Gleichungen
2. Umformen nach s (ensteht quadratische Gleichung, maximal 2 Werte oder auch keine Lösung falls Wurzelwert<0)
3. Einsetzen von s in g bringt die Ortsvektoren der Punkte
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#13

Re: Schnittpunkt Linie vs. Kreis

  Alt 2. Mai 2009, 14:27
Zitat:
Oder man hat mal was in Mathe von Analytik gehört und löst das Problem über Vektoren.
Oder man hat wirklich etwas von Analysis mitbekommen und weiss, das Vektoren in den Bereich der Algebra fallen.

Zitat:
[vx-vm]²=r²
meinst du vielleicht |vx-vm|=r^2 ?
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#14

Re: Schnittpunkt Linie vs. Kreis

  Alt 2. Mai 2009, 14:57
Jep, Analytik ist Chemie.

(Der Ansatz über Vektoren führt aber im Endeffekt auch zum gleichen Ergebnis)

(Und wenn mans ganz genau nimmt, sind reelle Zahlen auch Vektoren, von daher ist der ursprüngliche Ansatz auch über Vektoren )
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Draos

Registriert seit: 12. Aug 2008
42 Beiträge
 
Delphi 7 Enterprise
 
#15

Re: Schnittpunkt Linie vs. Kreis

  Alt 2. Mai 2009, 15:40
1. Analytik war bei uns immer kurzform von Analytische Geometrie.

2. Entweder die Form
k: [vx-vm]²=r² oder die
k: |vx-vm|=r. Deine wäre falsch
  Mit Zitat antworten Zitat
Dipl Phys Ernst Winter

Registriert seit: 14. Apr 2009
Ort: Jena
103 Beiträge
 
Delphi 3 Professional
 
#16

Re: Schnittpunkt Linie vs. Kreis

  Alt 3. Mai 2009, 12:36
Zitat:
Und wie gibt man damit eine Senkrechte an?
Vielen Dank für diesen Einwand.

m:= 1e99 würde zwar das Problem lösen, ist aber nicht eingebbar.

Gerade mit Punkt und Steigung war zwar das Einfachste, ist aber ein Fehlgriff. Ich habe das Programm abgeändert auf Gerade durch zwei Punkte.
Angehängte Dateien
Dateityp: exe geradekreis_687.exe (169,6 KB, 13x aufgerufen)
Autor: DP Ernst Winter
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#17

Re: Schnittpunkt Linie vs. Kreis

  Alt 3. Mai 2009, 12:46
Naja, bei einer senkrechten Gerade/Strecke ist der Fall doch trivial.
Es sei eine Strecke/Gerade [P1P2]/P1P2 gegeben durch die Punkte P1(x1|y1), P2(x2,y2) und ein Kreis k(M,r) mit dem Mittelpunkt M(xm,ym). Es gelte x1=x2.

Delphi-Quellcode:
dx := x1-xm;
disc := r*r-dx*dx;
if disc > 0 then
begin
  setlength(result, 2);
  result[0].X := x1;
  result[0].Y := ym + sqrt(disc);
  result[1].X := x1;
  result[2].Y := ym - sqrt(disc);
end
else if disc = 0 then
begin
  setlength(result, 1);
  result[0].X := x1;
  result[0].Y := ym;
end;
Die Schnittpunkte werden in result zurückgegeben.

(Bei einer Strecke muss man noch überprüfen, ob die gefundenen Schnittpunkte auch wirklich zwischen P1 und P2 liegen, da reicht die Überprüfung ((resultY <= y1) and (resultY >=y2)) or ((resultY >= <1) and (resultY <= y2)) )


Ich habe bisher alle Probleme dieser Art (z.B. Billardsimulation, Dreiecksaufgabe beim BWINF) so gelöst (Betrachtung als Funktion für x1!=x2, ansonsten Sonderfallbehandlung als senkrechte Gerade) und es funktioniert prima.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Xeridar

Registriert seit: 15. Okt 2012
1 Beiträge
 
#18

AW: Re: Schnittpunkt Linie vs. Kreis

  Alt 15. Okt 2012, 18:16
Ich grab mal diesen uralten Beitrag für eine Korrektur aus, da das einer der führenden Treffer in der Suche ist bei passenden Stichworten.

Delphi-Quellcode:
// M : Mittelpunkt des Kreises
// r : Kreisradius
// A : Stützpunkt der zu schneidenden Strecke/Gerade
// V : Richtungsvektor der Strecke/Gerade (Wenn diese aus 2 Punkten A und B gebildet ist, ist dies B-A)
// U : Hilfsvektor
// p, q, d, x1, x2 : Hilfsvariablen (Skalare, keine Vektoren)

  U := A-M;
  p := U*V;
  q := U^2 - r^2;
  d := p^2 - q;

  if d < 0 then
    Kein_Schnittpunkt
  else
  begin
    d := sqrt(d / |V|);
    x1 := -p + d;
    x2 := -p - d;
  end;

  if (x2>x1) and (x1>0) then
    Schnittpunkt := A + x1*V
  else
  if (x1>x2) and (x2>0) then
    Schnittpunkt := A + x2*V
  else
    Kein_Schnittpunkt_Oder_Schnitt_Hinter_A;
Ich war zu faul zum selber rechnen, also hab ich Onkel Google gefragt, bin hier gelandet und dachte mir "hey, schön, fertiger Code zum übernehmen... ist zwar delphi statt java, aber ist ja selbsterklärend".

Ja, das funktioniert allerdings nicht ganz.

Hab jetzt doch selbst gerechnet und möchte das hier eben anmerken:
Das Problem liegt in diesen Zeilen:
Delphi-Quellcode:
p := U*V;
q := U^2 - r^2;
d := p^2 - q;
d := sqrt(d / |V|);
|V| soll wohl die quadrierte euklidische Norm sein, also V.x*V.x + V.y*V.y
Das ist elegant geschrieben, denn die Terme tauchen in der Rechnung wirklich als Nenner bei sowohl p als auch q auf.
So wie es hier geschrieben ist wird |V| aber nicht mit quadriert bei der Berechnung von "p*p - q". Außerdem müsste auch die Berechnung von x1 bzw. x2 dadurch falsch sein, wenn |V|!=1.

Delphi-Quellcode:
p := U*V / |V|;
q := (U^2 - r^2) / |V|;
d := p^2 - q;
d := sqrt(d);
Auf diese Lösung komme ich und das wirft auch ganz andere (und erwartete) Ergebnisse in meinem Programm.

Geändert von Xeridar (15. Okt 2012 um 18:26 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz