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

Wo füge ich die Schleife ein

 

pallasathena
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 17.12.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.10.2017, 20:47     Titel: Wo füge ich die Schleife ein
  Antworten mit Zitat      
Hallo und einen schönen Abend wünsch ich!

Meine Aufgabenstellung ist für mich ziemlich komplex und deshalb benötige ich bitte Hilfe:
gegeben sind die Punkte FA, FB, FC und FHC (im Raum) ... diese Punkte gibt's wegen einer gewollten Bewegung 4000fach, also liegen drei 3-spaltige Vektoren mit 4000 Zeilen vor (unten hab ich die je ersten 7 Zeilen kopiert); den Punkt FHC gibt es nur einmal und der gehört zu den 3 Punkten der ersten Zeile
Ich muss nun für all diese Punkte die entsprechenden FHCs (3999x) berechnen.

Meine Idee ist, den Fußpunkt FPF1 als Schnittpunkt aus der senkrechten Geraden durch FHC mit der Ebene FA,FB,FC zu berechnen (FnABC=normalVektor zur Ebene ABC), was auch funktioniert - dabei stellt sich mir die Frage, ob ich das als Funktion schreiben muss? Bzw ist es so, wenn ich das als Funktion schreibe, scheint mir der Wert des Fußpunktes nicht auf und ich kann ihn nicht weiter verwenden; wie geh ich da vor? Deshalb hab ich hier im Code02 die Funktion auch auskommentiert.
Dann hab ich mir die Längen des Punktes FPF1 zu den Punkten FA, FB und FC berechnet (FfpA, FfpB und FfpB) und will diese als Radien für 3 Kugeln mit den neuen (gegebenen, bewegten) FAs, FBs und FCs als Mittelpunkt verwenden. Diese 3 Kugeln geschnitten sollen die neuen Fußpunkte ergeben und mit Rückrechnung aus Fußpunkt - lambda*FnABC sollen die neuen FHCs ermittelt werden.

Das ganze hab ich mir auch in MathCad entwickelt, dort funktioniert es auch, also stimmt der Weg, nur benötigt MathCad ca einen Tag!!! für ein File und ich muss 192 Files auswerten ---> ein 3/4 Jahr auswerten Sad Sad Sad ... btw sind nicht nur die neuen FHCs zu berechnen, sondern 23 andere solche Punkte (also 23*4000*192) Wink

Hier hab ich jetzt neben den oben schon angesprochenen Schwierigkeiten, ob Funktion oder nicht, das massive Problem, dass ich nicht weiß, wo ich die Schleife ansetzen muss (zum Testen hab ich nur die ersten 7 Zeilen als Bereich angegeben) und da ärgert mich ganz besonders das 'sol' aus dem Code03 - ich vermute, dass dort der Knackpunkt ist. Für eine Zeile bekomme ich ein richtiges Ergebnis, aber nicht für mehrere ...
jetzt hoffe ich noch, mich verständlich ausgedrückt zu haben und ich hänge auch schon gleich ein Danke für Eure Beschäftigung mit meiner Sache an

Ela

FA =
-143,800461000000 -196,662064000000 -171,780533000000
-144,114456000000 -198,236328000000 -171,144669000000
-144,126297000000 -198,187454000000 -171,208282000000
-144,093277000000 -198,150131000000 -171,236099000000
-144,090103000000 -198,107727000000 -171,245667000000
-144,086288000000 -198,029892000000 -171,218872000000
-144,075409000000 -198,007111000000 -171,235245000000

FB =
-160,635269000000 -247,633682000000 -162,235001000000
-159,826843000000 -249,680252000000 -162,240982000000
-159,850281000000 -249,619965000000 -162,259216000000
-159,853470000000 -249,557800000000 -162,208282000000
-159,909134000000 -249,492401000000 -162,189926000000
-159,931351000000 -249,410461000000 -162,185425000000
-159,985245000000 -249,354233000000 -162,125763000000

FC =
-182,238937000000 -205,525131000000 -145,927582000000
-182,323227000000 -208,264099000000 -145,376907000000
-182,316559000000 -208,184952000000 -145,401337000000
-182,327972000000 -208,079346000000 -145,468597000000
-182,325546000000 -207,979706000000 -145,457306000000
-182,373642000000 -207,891296000000 -145,503586000000
-182,382111000000 -207,781799000000 -145,515656000000

FHC =
-473,394400000000 -241,660000000000 31,1514000000000

Code:

FnABC = cross(FB-FA,FC-FA);
syms lambdaF
V = [x,y,z];
 


Code:

% function FPF1 = FusspunktFemur(FnABC,V,FA,FHC,lambdaF)

% hier wird die Ebene der FemurMarker ABC mit der Geraden durch FHC normal zur Ebene geschnitten
% --> dieser Schnittpunkt ist der erste Fußpunkt FPF1.
planefuncF = dot(FnABC(1,1:3), V-FA(1,1:3));
lineF = FHC(1,1:3) + lambdaF*(FnABC(1,1:3));
newfuncF = subs(planefuncF, V, lineF);
lambdaF0 = solve(newfuncF);
lambdaF0 = double(lambdaF0);
FPF1 = subs(lineF, lambdaF, lambdaF0);
FPF1 = double(FPF1);
% end
% Abstaende
dF = norm(FHC(1,1:3)-FPF1(1,1:3));
dF = double(dF);
FfpA = norm(FA(1,1:3)-FPF1(1,1:3));
FfpA = double(FfpA);
FfpB = norm(FB(1,1:3)-FPF1(1,1:3));
FfpB = double(FfpB);
FfpC = norm(FC(1,1:3)-FPF1(1,1:3));
FfpC = double(FfpC);
 


Code:

function FHCneu = KugelSchnittPktF(FA,FB,FC,FfpA, FfpB, FfpC, lambdaF0, FnABC)
% i = 1:7;     %length(FA)
% Kugelmittelpunkte
MAF(1:7,1:3) = FA(1:7,1:3);  
MBF(1:7,1:3) = FB(1:7,1:3);  
MCF(1:7,1:3) = FC(1:7,1:3);  

% Radien
rAF = double(FfpA);
rBF = double(FfpB);
rCF = double(FfpC);

% Kugelgleichungen
syms x y z
k1 = (x - MAF(1,1))^2 + (y - MAF(1,2))^2 + (z - MAF(1,3))^2;
k2 = (x - MBF(1,1))^2 + (y - MBF(1,2))^2 + (z - MBF(1,3))^2;
k3 = (x - MCF(1,1))^2 + (y - MCF(1,2))^2 + (z - MCF(1,3))^2;

syms gleichung1 gleichung2 gleichung3
gleichung1 = [char(k1),'=',num2str(rAF^2)];
gleichung2 = [char(k2),'=',num2str(rBF^2)];
gleichung3 = [char(k3),'=',num2str(rCF^2)];

sol = solve(gleichung1,gleichung2,gleichung3);
neuFPF(x,y,z) = sol;

% Schnittpunkte
sol.x = double(sol.x);
sol.y = double(sol.y);
sol.z = double(sol.z);
FPabcFHC = [real(sol.x(1)) (real(sol.y(1))) (real(sol.z(1)))];
neuFPF = sol;
%for i = 1:7
FHCneu(1:7) = ((neuFPF(1:7,1:3)) - (lambdaF0*FnABC(1:7,1:3)));
%end
FPabcFHC
FHCneu
end
 


[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 05.10.2017, 18:52     Titel: Re: Wo füge ich die Schleife ein
  Antworten mit Zitat      
Hallo pallasathena,

Ich kann den erklärungen nicht folgen.

Zitat:
den Punkt FHC gibt es nur einmal und der gehört zu den 3 Punkten der ersten Zeile
Ich muss nun für all diese Punkte die entsprechenden FHCs (3999x) berechnen.

Gibt es den Ounkt nun "nur einmal" oder musst Du ihn "berechnen"?

Zitat:
Meine Idee ist, den Fußpunkt FPF1 als Schnittpunkt aus der senkrechten Geraden durch FHC mit der Ebene FA,FB,FC zu berechnen (FnABC=normalVektor zur Ebene ABC), was auch funktioniert ...

Das verstehe ich nicht.

Zitat:
- dabei stellt sich mir die Frage, ob ich das als Funktion schreiben muss?

Wenn Du magst. Was wäre denn die Alternative? Es direkt im Hauptprogramm zu berechnen? Prinzipiell ist das kein Unterschied.

Zitat:
Bzw ist es so, wenn ich das als Funktion schreibe, scheint mir der Wert des Fußpunktes nicht auf und ich kann ihn nicht weiter verwenden;

Da fehlen wohl ein paar wichtige Wörter im Satz, oder?

Zitat:
Dann hab ich mir die Längen des Punktes FPF1 zu den Punkten FA, FB und FC berechnet (FfpA, FfpB und FfpB) und will diese als Radien für 3 Kugeln mit den neuen (gegebenen, bewegten) FAs, FBs und FCs als Mittelpunkt verwenden. Diese 3 Kugeln geschnitten sollen die neuen Fußpunkte ergeben und mit Rückrechnung aus Fußpunkt - lambda*FnABC sollen die neuen FHCs ermittelt werden.

Ist es wirklich notwendig, diese Details nachvollziehen zu können, um Dir zu helfen?

Möchtest Du dies wirklich symbolisch lösen? Das sollte numerisch ziemlich einfach sein und deutlich schneller. Das sieht nach einer einfachen Matrix-Gleichung aus und der \ Operator sollte das direkt und sehr zügig berechnen können.

Die geposteten Daten kann man so nicht gebrauchen, wegen des Kommas als Dezimal-Trenner.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
pallasathena
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 17.12.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.10.2017, 21:06     Titel: Re: Wo füge ich die Schleife ein
  Antworten mit Zitat      
[quote="Jan S"]Hallo pallasathena,

Ich kann den erklärungen nicht folgen.

Zitat:
den Punkt FHC gibt es nur einmal und der gehört zu den 3 Punkten der ersten Zeile
Ich muss nun für all diese Punkte die entsprechenden FHCs (3999x) berechnen.

Zitat:
Gibt es den Ounkt nun "nur einmal" oder musst Du ihn "berechnen"?


Dieser Punkt gehört zu den Punkten FA, FB, FC und gibt es nur einmal, ich muss allerdings das Pendant zu den restlichen FAs, FBs und FCs berechnen. Das Ziel ist, die neuen Positionen des FHC zu berechnen, die sich durch die Bewegung der Punkte FA, FB und FC ergibt. Vielleicht sollte ich dazu schreiben, dass FA, FB und FC fixierte Marker auf einem Knochen sind und FHC eine spezielle Landmarke. Der Knochen wurde bewegt, also, daher die vielen verschiedenen Positionen (4000) und die neuen Positionen von FHC sind das begehrte Objekt des Arztes.

Zitat:
Meine Idee ist, den Fußpunkt FPF1 als Schnittpunkt aus der senkrechten Geraden durch FHC mit der Ebene FA,FB,FC zu berechnen (FnABC=normalVektor zur Ebene ABC), was auch funktioniert ...

Zitat:
Das verstehe ich nicht.


Hm, ich will quasi die Projektion von FHC auf die Ebene berechnen ...

Zitat:
- dabei stellt sich mir die Frage, ob ich das als Funktion schreiben muss?

Zitat:
Wenn Du magst. Was wäre denn die Alternative? Es direkt im Hauptprogramm zu berechnen? Prinzipiell ist das kein Unterschied.


Gut, danke ...

Zitat:
Bzw ist es so, wenn ich das als Funktion schreibe, scheint mir der Wert des Fußpunktes nicht auf und ich kann ihn nicht weiter verwenden;

Zitat:
Da fehlen wohl ein paar wichtige Wörter im Satz, oder?


Ich wüsste jetzt nicht, was da fehlen sollte ... ich hab mir jetzt meinen Satz einige Male durchgelesen und finde nichts ergänzungswürdiges.

Zitat:
Dann hab ich mir die Längen des Punktes FPF1 zu den Punkten FA, FB und FC berechnet (FfpA, FfpB und FfpB) und will diese als Radien für 3 Kugeln mit den neuen (gegebenen, bewegten) FAs, FBs und FCs als Mittelpunkt verwenden. Diese 3 Kugeln geschnitten sollen die neuen Fußpunkte ergeben und mit Rückrechnung aus Fußpunkt - lambda*FnABC sollen die neuen FHCs ermittelt werden.

Zitat:
Ist es wirklich notwendig, diese Details nachvollziehen zu können, um Dir zu helfen?


Ich wollte einfach nur genau beschreiben ...

Zitat:
Möchtest Du dies wirklich symbolisch lösen? Das sollte numerisch ziemlich einfach sein und deutlich schneller. Das sieht nach einer einfachen Matrix-Gleichung aus und der \ Operator sollte das direkt und sehr zügig berechnen können.


Ich will das nicht symbolisch lösen, weiß nur nicht, wie ich das sonst machen soll - denn genau das symbolische scheint ja die Falle zu sein. Könntest Du mir denn da bitte auf die Sprünge helfen?

Zitat:
Die geposteten Daten kann man so nicht gebrauchen, wegen des Kommas als Dezimal-Trenner.


Ich wundere mich jetzt selber über die Darstellung, ich hab sie nämlich direkt aus matlab kopiert. Ich ergänze das gleich, ich bin grad nicht am Rechner

Zitat:
Gruß, Jan


Vielen Dank für Dein Bemühen ... hilfst Du mir denn bitte weiter, wenn ich ergänzt habe? Ich ahne nämlich, dass ich dann mit der Schleife auch noch Schwierigkeiten habe
Ela

Zuletzt bearbeitet von pallasathena am 05.10.2017, 23:00, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
pallasathena
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 17.12.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.10.2017, 21:21     Titel:
  Antworten mit Zitat      
Jetzt noch einmal die Daten der Punkte

FA =
-143.800461000000 -196.662064000000 -171.780533000000
-144.114456000000 -198.236328000000 -171.144669000000
-144.126297000000 -198.187454000000 -171.208282000000
-144.093277000000 -198.150131000000 -171.236099000000
-144.090103000000 -198.107727000000 -171.245667000000
-144.086288000000 -198.029892000000 -171.218872000000
-144.075409000000 -198.007111000000 -171.235245000000

FB =
-160.635269000000 -247.633682000000 -162.235001000000
-159.826843000000 -249.680252000000 -162.240982000000
-159.850281000000 -249.619965000000 -162.259216000000
-159.853470000000 -249.557800000000 -162.208282000000
-159.909134000000 -249.492401000000 -162.189926000000
-159.931351000000 -249.410461000000 -162.185425000000
-159.985245000000 -249.354233000000 -162.125763000000

FC =
-182.238937000000 -205.525131000000 -145.927582000000
-182.323227000000 -208.264099000000 -145.376907000000
-182.316559000000 -208.184952000000 -145.401337000000
-182.327972000000 -208.079346000000 -145.468597000000
-182.325546000000 -207.979706000000 -145.457306000000
-182.373642000000 -207.891296000000 -145.503586000000
-182.382111000000 -207.781799000000 -145.515656000000

FHC =
-473.394400000000 -241.660000000000 31.1514000000000

Ich hoffe, dass die Daten jetzt brauchbar sind - beim Kopieren hat sich da automatisch das Komma anstatt des Punktes hineingeschmuggelt. Und ja, ich hab mein System schon auf den Punkt umgestellt, da die wissenschaftlichen Programme durchwegs mit Punkt arbeiten

Bei den Kugeln muss ich nicht die einzelnen Zeilen für x, y und z definieren?

Ela
Private Nachricht senden Benutzer-Profile anzeigen
 
pallasathena
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 17.12.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.10.2017, 17:53     Titel:
  Antworten mit Zitat      
noch ein Nachtrag der schon errechneten Werte, damit das Nachvollziehen leichter wird:

FPF1 (Fußpunkt von FHC) =
-4.641361397337903e+02 -2.421728811547556e+02 44.740862766042405

Abstände
dF = |FHC - FPF1|
16.451502317582860

FfpA = |FA - FPF1| --> rFA
3.893169613212438e+02
FfpB = |FB - FPF1| --> rFB
3.673984309489354e+02
FfpC = |FC - FPF1| --> rFC
3.422916100783693e+02

und mein neuer Code, um den Schnittpunkt der 3 Kugeln zu berechnen, ich bekomme aber immer eine Fehlermeldung

Code:
Kug01 = (V-FA)^2 - rAF^2;
Kug02 = (V-FB)^2 - rBF^2;
Kug03 = (V-FC)^2 - rCF^2;

neuFPF = fsolve(Kug01,Kug02,Kug03);
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 10.10.2017, 15:17     Titel:
  Antworten mit Zitat      
Hallo pallasathena,

Das geht ohne Kugel-Fitting. Ich melde mich.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
pallasathena
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 17.12.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.10.2017, 17:00     Titel:
  Antworten mit Zitat      
Da bin ich jetzt sehr neugierig, danke Dir

Ela
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.