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

Bestimmung des Schnittpunktes von 3 Kugeln im Raum

 

Rumble2006
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 10.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.05.2010, 13:48     Titel: Bestimmung des Schnittpunktes von 3 Kugeln im Raum
  Antworten mit Zitat      
Hallo an alle.

Bin Matlab Neuling und benötige eure Hilfe für folgendes Problem:

Ich habe die Koordinaten von drei Kugelmittelpunkten und den Radius der Kugeln, der bei allen drei Kugeln gleich ist. Nun möchte ich eine Formel aufstellen, mit der ich in der lage bin , aus dem Radius und den Koordinaten der Kugelmittelpunkte die X,Y,Z Koordinaten der 2 Schnittpunkte zu bestimmen. Diese Formel sollte aber möglichst allgemein bleiben. Ich weiß nicht so richtig wie ich mit Matlab da dran gehen soll (Symbolic Toolbox???). Hab das schonmal händisch versucht, hab aber ziemlich schnell festgestellt, dass das ellenlange Ausdrücke gibt, die nicht mehr zu händeln sind. Ich wäre für jeden Vorschlag eurerseits sehr dankbar.

Folgende vorgehensweise habe ich mir überlegt:

1. 2 Kugeln schneiden sich und bilden einen Kreis.

2. Kreis und 3. Kugel schneiden sich und bilden 2 Punkte.

Ich weiß nicht so richtig, wie ich Kugelgleichungen aufstelle und diese Gleichsetzte um eine Kreisgleichung zu bekommen usw.

Es hängt also an vielen Stellen.


Vielen Dank schonmal für alle, die sich Zeit für mich nehmen.


Viele Grüße

Rumble
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.05.2010, 23:40     Titel:
  Antworten mit Zitat      
Hallo,

die Symbolic Math Toolbox wäre zwar grundsätzlich das richtige Tool. Wenn du aber da Formeln herausbekommst, wären sie bei diesem Problem so lange, dass man doch nichts damit anfangen könnte.
Numerisch lösen kann man das Problem z.B. mit fsolve oder lsqnonlin.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Rumble2006
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 10.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.05.2010, 07:38     Titel: Bestimmung des Schnittpunktes von 3 Kugeln im Raum
  Antworten mit Zitat      
Hallo Harald.

Vielen Dank schonmal für deine Antwort. Hast du eventuell mal ein Beispiel parat, wie ich mit fsolve oder lsqnonlin den Schnittkreis bzw. die Schnittpunkte von zwei, bzw. drei Kugeln bestimme. Es habert eigentlich schon an der Eingabe. In welcher Form hinterlege ich die Kugelgleichung, wie gehe ich jetzt am besten vor?

Vielen Dank für eure Mühe.

Mfg

Rumble
Private Nachricht senden Benutzer-Profile anzeigen
 
Rumble2006
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 10.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.05.2010, 08:45     Titel: Bestimmung des Schnittpunktes von 3 Kugeln im Raum
  Antworten mit Zitat      
Hallo nochmal an alle Hilfsbereiten.

Ich habe eine gute Beschreibung gefunden, wie ich diese Punkte berechnen kann. Allerdings weiß ich nicht, wie ich dies in einem m-File umsetzen kann. Vielleicht kann mir ja jemand helfen. Ich hänge den Link mal an:

http://www.matheboard.de/thread.php.....8127&hilight=3+kugeln

Danke im Voraus.

Mfg Rumble
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas84
Forum-Meister

Forum-Meister


Beiträge: 546
Anmeldedatum: 10.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.05.2010, 13:35     Titel:
  Antworten mit Zitat      
Hier mal eine Lösung mit Hilfe von solve. Man könnte die Kreismittelpunkte und Radien auch als symbolische Variablen übergeben. Dann dauert es nur ziemlich lange und die Gleichungen sind wahrscheinlich sehr unübersichtlich.



Code:

% Kugelmittelpunkte
k1 = [0;0;0];
k2 = [1;0;0];
k3 = [0;1;0];

% Radien
r1 = 1;
r2 = 1;
r3 = 1;

syms x y z;

% Kugelgleichungen
k1 = (x - k1(1))^2 + (y - k1(2))^2 + (z - k1(3))^2;
k2 = (x - k2(1))^2 + (y - k2(2))^2 + (z - k2(3))^2;
k3 = (x - k3(1))^2 + (y - k3(2))^2 + (z - k3(3))^2;

gleichung1 = [char(k1),'=',num2str(r1^2)];
gleichung2 = [char(k2),'=',num2str(r2^2)];
gleichung3 = [char(k3),'=',num2str(r3^2)];


sol = solve(gleichung1,gleichung2,gleichung3);

% Schnittpunkte
sol.x
sol.y
sol.z
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Rumble2006
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 10.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.05.2010, 13:48     Titel:
  Antworten mit Zitat      
Vielen Dank.

Funktioniert einwandfrei und ist ein Bruchteil von meinem Code.

Hatte mir mittlerer Weile folgendes überlegt:

Code:
function [A,B] = Koordinaten(x1,y1,h1,x2,y2,h2,x3,y3,h3,l1,l2,l3)
N1 = [0;0;0];
N2 = [0;0;0];
G1 = [0 0];
G2 = [0 0];
G = [0 0; 0 0];
b = [0;0];
syms x y z t

K1=x^2+y^2+z^2-2*x1*x-2*y1*y-2*h1*z+x1^2+y1^2+h1^2-l1;
K2=x^2+y^2+z^2-2*x2*x-2*y2*y-2*h2*z+x2^2+y2^2+h2^2-l2;
K3=x^2+y^2+z^2-2*x3*x-2*y3*y-2*h3*z+x3^2+y3^2+h3^2-l3;

E1=K2-K3;
E2=K1-K3;

y = 0;
z = 0;
x = 0;

k = subs(E1);

x = 1;

N1(1)=subs(E1)-k;

x=0;
y=1;
N1(2)=subs(E1)-k;

y=0;
z=1;
N1(3)=subs(E1)-k;

y = 0;
z = 0;
x = 0;

k = subs(E2);

x = 1;

N2(1)=subs(E2)-k;

x=0;
y=1;
N2(2)=subs(E2)-k;

y=0;
z=1;
N2(3)=subs(E2)-k;

N=cross(N1,N2); %.*(-1);
%X=N;

G1(1) = N1(2);
G1(2) = N1(3);

G2(1) = N2(2);
G2(2) = N2(3);

G1
G2
G=[G1; G2]

x=0;
y=0;
z=0;

b=[subs(E1);subs(E2)].*(-1)

Erg = G\b

Erg1 = [0; Erg]%.*(-1)

Gerade=Erg1+t*N

x=Gerade(1);
y=Gerade(2);
z=Gerade(3);

T=subs(K1)

TGerechnet = solve(T,t);

t=TGerechnet(1);
A=vpa(subs(Gerade),5)
t=TGerechnet(2);
B=vpa(subs(Gerade),5)
 


Hatte mich halt an der Beschreibung vom MatheBoard langgehangelt. Ist sehr kompliziert (wahrscheinlich auch kompliziert nachzuvollziehen) und noch fehleranfällig. Müssten noch einige Abfragen rein.

Vielen Dank an alle, die sich Zeit für mich genommen haben.


Mfg

Rumble
Private Nachricht senden Benutzer-Profile anzeigen
 
Rumble2006
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 10.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.05.2010, 14:30     Titel:
  Antworten mit Zitat      
Hallo nochmal.

Frage: Wenn ich bei dem Code von Thomas84 als mittelpunkte Kommazahlen benutzte, steigt mein Matlab bei der solve-fkt aus.

Rechner zu schwach? Oder gibt es dafür andere solve-ftnen?


Viele Grüße

Rumble
Private Nachricht senden Benutzer-Profile anzeigen
 
Phate
Forum-Guru

Forum-Guru



Beiträge: 283
Anmeldedatum: 09.11.09
Wohnort: Stuttgart
Version: R2008b
     Beitrag Verfasst am: 11.05.2010, 15:36     Titel:
  Antworten mit Zitat      
Hi,

Viellecht eine ganz einfache Lösung. In Matlab werden "Kommazahlen" durch einen Punkt getrennt nicht mit einem Komme wie in Deutschland.

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.05.2010, 19:50     Titel:
  Antworten mit Zitat      
Hallo,

wenn das Komma als Dezimaltrennzeichen das Problem wäre, wäre es wohl schon früher zu Problemen gekommen.

Das Problem wird eher sein, dass es einfach "unmöglich" ist, dieses Problem symbolisch zu lösen. Und wenn es wirklich eine 50 Seiten lange symbolische Lösung gibt, was um alles in der Welt soll man damit anfangen?

Also mal das ganze numerisch:

Code:
function [x, fval] = findeSchnitt(M, r)

opt = optimset('TolFun', 1e-12, 'TolX', 1e-12, 'Display', 'off');
[x, fval] = lsqnonlin(@(x) fehler(x,M,r), [0; 0; 0],[],[],opt);
if fval > 1e-5
    warning('Es könnte sein, dass kein Schnittpunkt gefunden wurde.')
end


Code:
function err = fehler(x, M, r)
% x: momentaner Punkt
% M: Matrix mit Koordinaten der Mittelpunkte in Spalten
% r: Radien der Kugeln

err = [sqrt(sum((x-M(:,1)).^2)) - r(1);...
    sqrt(sum((x-M(:,2)).^2)) - r(2);...
    sqrt(sum((x-M(:,3)).^2)) - r(3)];


und zum Testen:

Code:
% Test-Daten um sicherzustellen, dass es einen Schnittpunkt gibt
M = rand(3,3);
x = rand(3,1);
r(1) = sqrt(sum((M(:,1)-x).^2));
r(2) = sqrt(sum((M(:,2)-x).^2));
r(3) = sqrt(sum((M(:,3)-x).^2));
[x0, fval] = findeSchnitt(M, r);
% Achtung: es gibt meist 2 Schnittpunkte. Es kann sein, dass der andere
% gefunden wird.


Bleibt noch die Frage, wie man den zweiten Schnittpunkt findet.
a) ausreichend verschiedener Startpunkt
b) sich überlegen, ob man mit Geometrie (Spiegelung oder so) den anderen Schnittpunkt direkt ausrechnen kann.

Oder ein ausreichend guter Startwert [im Beispiel pauschal (0,0,0)], dann sollte der interessante Schnittpunkt schon gefunden werden.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas84
Forum-Meister

Forum-Meister


Beiträge: 546
Anmeldedatum: 10.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.05.2010, 06:48     Titel:
  Antworten mit Zitat      
Hier bräuchte man eine Kombination aus symbolischer und numerischer Berechnung.
Beispiel:
Bei der Berechnung von

2.1*x + 1.7*x = 3.8*x

müsste 2.1 und 1.7 numerisch addiert werden.

Dann würde meine Lösung für beliebige Zahlen schnell funktionieren. Keine Ahnung ob es sowas schon gibt.

viele Grüße
Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
Rumble2006
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 10.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.05.2010, 08:19     Titel:
  Antworten mit Zitat      
Hallo nochmal an alle.

Mein Problem ist hiermit gelöst. Hab die Version von Harald benutzt und die läuft ohne Probleme auch bei Kommazahlen durch. Das Problem mit den Zwei Schnittpunkten betrifft mich nicht, da ein Schnittpunkt immer in der positiven Z-Ebene und einer immer in der negativen Z-Ebene liegt. Mich interessiert aber nur der in der positiven Z-Ebene und bei Wahl eines guten Startwertes wird dieser auch immer gefunden.

Vielen Dank nochmal an Harald und Thomas84 und alle die mir geholfen haben.


Mfg

Rumble
Private Nachricht senden Benutzer-Profile anzeigen
 
Mechatroniker-Sepp

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.08.2015, 16:06     Titel: Bestimmen der Radien bei gegebenen Schnittpunkt von 3 Kugeln
  Antworten mit Zitat      
Hallo, ich habe das Thema sehr interessiert verfolgt!

Nun hätte ich noch eine Frage als totaler MatLab- Neuling,

Wie kann ich bei gegebenen Schnittpunkt (Es soll genau einen Schnittpunkt geben der 3 Kugeln) die Radien der Kugeln ermitteln???

Die Kugelmittelpunkte sind fest gegeben.

Koordinaten der Mittelpunkte sind folgende:

K1 (0/0/3)
K2 (0/3/3)
K3 (3/1,5/3)

Der Schnittpunkt soll variabel sein, sprich der Schnittpunkt wird sich bewegen.
Nun sollen die Radien der Kugeln in Abhängigkeit des Schnittpunktes ermittelt werden.

Der Schnittpunkt soll innerhallb des Würfels mit den Längen 3x3x3 liegen.

Ich hoffe mir kann jemand helfen! Smile

Vielen Dank schon mal!!!
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.08.2015, 16:16     Titel:
  Antworten mit Zitat      
Hallo,

wenn ich das richtig verstehe, brauchst du nur den Abstand des Schnittpunkts zu den Mittelpunkten, also
Code:
norm(K1-S)
norm(K2-S)
norm(K3-S)


Das hat eigentlich wenig mit der ursprünglichen Frage zu tun. In diesen Fällen bitte einen neuen Thread aufmachen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Mechatroniker-Sepp
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 29.08.15
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 29.08.2015, 06:30     Titel:
  Antworten mit Zitat      
Vielen Dank für die Antwort!

Sorry...

Werde ich in Zukunft beachten/ und machen mit dem neuen Beitrag!

-> Hier mein neues Thema... vielleicht kann mir ja hier jemand Antworten Smile Danke...

http://www.gomatlab.de/schnittpunkt.....schnittpunkt++kugeln.html
Private Nachricht senden Benutzer-Profile anzeigen
 
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 - 2024 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.