WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Schnittpunkt Kreis-Gerade

 

Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.07.2008, 15:42     Titel: Schnittpunkt Kreis-Gerade
  Antworten mit Zitat      
Ich brauche Hilfe bei der

---Schnittpunktberrechnung von Kreis und Gerade---

Wenn ich also Geradengleiche (m*x+c) und Kreisgleichung (x^2+y^2=...) gegeben habe. Wie funktioniert das dann?


Mfg, Lennart


dib0r
Forum-Guru

Forum-Guru


Beiträge: 413
Anmeldedatum: 09.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.07.2008, 16:58     Titel:
  Antworten mit Zitat      
Hallo,

Code:
oder
Code:
sollte dir da weiterhelfen.

MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.08.2008, 10:12     Titel:
  Antworten mit Zitat      
danke erstmal.
Bin leider so ein Anfänger, dass ich mit der englischen Hilfe von matlab (un dem was sie zu fsolve ausspuckt) nicht wirklich was anfangen kann.

Ist das sehr kompliziert von wegen der schnittpunkte?


Gruß Lennart
 
dib0r
Forum-Guru

Forum-Guru


Beiträge: 413
Anmeldedatum: 09.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.08.2008, 11:12     Titel:
  Antworten mit Zitat      
Hallo,

zusätzlich gibt es natürlich auch noch
Code:
und
Code:
(hab ich leider unterschlagen).

z.B. geht es mit roots

Gehen wir von deinen 2 Gleichungen aus:
x^2 + y^2 = r^2;
y = m*x + c;

Dann setzt man einfach y in die obige Gleichung ein:
x^2 + (m*x + c)^2 = r^2;
bzw.
(1+m^2)*x^2 + 2*m*c*x + (c^2 - r^2) = 0;

Dies dient nun als input für roots:
Code:
roots([1+m^2,2*m*c,c^2-r^2]);

Und schon erhälst du als Output die X-Koordinaten der beiden Schnittpunkte (eventuell noch kontrollieren ob sie reell sind da roots auch komplexzahlige Lösungen liefert wenn die Schnittpunkte nicht reell sind).
Für die Y-Koordinaten setzt du einfach die X-Koordinaten in eine der beiden Gleichungen ein.

Mit fzero sieht das ganze z.B. so aus (oder auch fsolve):
Code:
fzero(@(x) x^2 + (m*x + c)^2 - r^2, x0)
mit x0 als Startpunkt. Allerdings liefert die fzero nur einen Schnittpunkt (oder NaN für keinen reellen), deshalb müsstest du die Funktion zweimal aufrufen, z.B. einmal mit -r und einmal mit +r als Startpunkt.

MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.08.2008, 16:34     Titel:
  Antworten mit Zitat      
vielen Dank. Ich denke das funktioniert so.
Ich bin gerade dabei es zu probieren.

Meine speziellen Werte sind:

y = -1,19x + 3,38

(y-1)² + (x-1)² = 1,5²

Ich habe mit root/fzero probiert zu rechnen, bekomme aber jeweils komplexe Zahlen als Lösungen. Jetzt bin ich momentan auf Fehlersuch, komme jedoch nicht wirklich weiter.

Das das jemand nochmal nachrechnet zur Kontrolle ist wohl aber zuviel verlangt =).

Lennart
 
dib0r
Forum-Guru

Forum-Guru


Beiträge: 413
Anmeldedatum: 09.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.08.2008, 19:35     Titel:
  Antworten mit Zitat      
Hallo,

hast du auch alles richtig eingesetzt?

m = -1.19;
c = 3.38;
r = 1.5;


(m*x+c-1)^2 + (x-1)^2 = r^2;

ergibt

(1+m^2)*x^2 + (2*m*(c-1) - 2)*x + (c-1)^2+1-r^2 = 0;

Code:
roots([1+1.19^2 -2*1.19*2.28-2 2.38^2+1-1.5^2])

ans =

    2.2682
    0.8055
 


MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
dotwinX

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.12.2009, 16:04     Titel: Zusatzfrage zum gleichen Problem
  Antworten mit Zitat      
Hallo erstmal,

ich wollte keinen neuen Thread eröffnen, da dieser recht gut zu meinem Problem passt. Ich habe auch einen Kreis und eine Gerade, leider ohne Geradengleichung, sondern nur mit endlichen numerischen Punkten.
Wie errechne ich denn da den Schnittpunkt?

Ich hab mal folgende Funktion geschrieben, die auch funktioniert:
Code:

%gives back: index and the value of x1, y1

function [value, index] = cross_point(x1, y1, x2, y2)

if length(x1)~=length(y1)
    return;
elseif length(x2)~=length(y2)
    return;
end

increment=length(x1);

%preallocate:
distance=1:1:increment;
distancev=1:1:increment;

for j=1:1:increment
   
    for i=1:1:increment
        distance(i)=sqrt((abs(x1(j)-x2(i))^2)+(abs(y1(j)-y2(i))^2));
    end

distancev(j)=min(distance);

end

[value index]=min(distancev);
 

Grundidee ist halt, dass der Abstand jedes Punktes einzelnd geprüft wird. Der geringste Abstand gewinnt.

...
Diese simple Funktion hat 2 derbe Probleme
1) Geschwindigkeit, wenn die Stützstellen (also die Länge der Vektoren) mal so ebend 10.000 betragen, dann haben wir ne Doppellschleife mit 10.000*10.000 runden!
Und da ich diese Funktion nochmal 360 mal ausführe (Ein Kreis mit vielen Geraden, die etwa von der Mitte starten), kannn man sich vorstellen, dass dies sehr sehr lange dauert.

2) Es ist nicht genau. Ansich wird ja der minimale Abstand gesucht, aber nich der exakte Schnittpunkt, welcher mir lieber wäre. Die Funktion sucht ja nur die Punkte die am dichtesten sind.

Habt ihr ne Idee oder ein paar Tipps wie man die Funktion verbessern könnte? oder gibt es so eine Funktion schon?
 
dotwinX
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 06.12.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.12.2009, 17:06     Titel:
  Antworten mit Zitat      
Hab die Funktion gefunden!

Die heißt "CURVEINTERSECT", für diejenigen die das auch interessiert
Private Nachricht senden Benutzer-Profile anzeigen
 
Dave

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2010, 20:41     Titel: Danke
  Antworten mit Zitat      
Versuche die Schnittpunkte dreier Kurven zu berechnen, mal versuchen! Merci für den Tipp
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.