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

Berechnung d. Strecke mit 2 Punkten in einem Vektor speicher

 

JanInfoMed
Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 29.08.19
Wohnort: Regensburg
Version: ---
     Beitrag Verfasst am: 22.10.2019, 12:07     Titel: Berechnung d. Strecke mit 2 Punkten in einem Vektor speicher
  Antworten mit Zitat      
Code:
function out =  Randerzeugen(xwert,ywert,X,Y,isInside,block1,randdicke)
sz_x=size(xwert,1);
out=false(size(X));
Lambda= 0:0.25:1;
index = 1;
for i=1:sz_x
    Points(i,:)=[xwert(i) ywert(i)];
   
end
sz=size(Points,1);
if (~isInside == true)
for n=1:sz
vektor (index) = (Points(n,:)+Lambda.*(Points(n+1,:)-Points(n,:)));    % Warum kann er nicht meine Berechnung durchführen ich will zwei Punkte miteinander verbinden auf dieser Strecke sollen mehrere Punkte entstehen -> Lambda soll mir dabei helfen. Diese Berechnung soll in einem Vektor gespeichert werden damit ich nacher es mit dem logical out vergleichen kann.

end
 
Matrix dimensions must agree.

Error in ProjektNeu>Randerzeugen (line 99)
(Points(n,:)+Lambda.*(Points(n+1,:)-Points(n,:)));

Error in ProjektNeu (line 44)
        bin(:,:,i)=(Randerzeugen(x,y,X,Y,false,tmp, randdicke));
 
 
Private Nachricht senden Benutzer-Profile anzeigen


T16
Forum-Century

Forum-Century


Beiträge: 145
Anmeldedatum: 31.01.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.10.2019, 15:16     Titel:
  Antworten mit Zitat      
Die Fehlermeldung sagt es ja schon, die Dimensionen deiner Arrays sind unterschiedlich.

Du belegst index mit eins (übrigens dauerhaft, ich vermute mal der index soll im Laufe der Funktion erhöht werden?), damit ist vektor(index) ein Skalar. Rechts vom Gleichheitszeichen steht aber ein Zeilenvektor. Außerdem müsste Lamda genausoviele Einträge besitzen wie Points(n,Smile, ist das immer gegeben?
Private Nachricht senden Benutzer-Profile anzeigen
 
JanInfoMed
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 29.08.19
Wohnort: Regensburg
Version: ---
     Beitrag Verfasst am: 04.11.2019, 10:08     Titel:
  Antworten mit Zitat      
Code:
function out =  Randerzeugen(xwert,ywert,X,Y,isInside,block1,randdicke)
if size(xwert,1)<10  % für Koordinaten -> die unter 10 Punkte haben
    [xwert,ywert] = koordinaten_interpolieren(xwert,ywert); % Hier ist die Berechnung der Punkte  
end
sz_x=size(xwert,1);
out=false(size(X));
if (~isInside == true)
    for i=1:sz_x
        out=out | (((X-xwert(i)).^2)+((Y-ywert(i)).^2) <= randdicke*2);
    end
elseif (isInside == true)
    block1=~block1;
    for i=1:sz_x
        out=out | (((X-xwert(i)).^2)+((Y-ywert(i)).^2) <= randdicke*2);
    end
end
out= and(out,block1);
end

function [xnew,ynew]=koordinaten_interpolieren(xwert,ywert)

for n=1:sz
    function out =  Randerzeugen(xwert,ywert,X,Y,isInside,block1,randdicke)
if size(xwert,1)<10  % für Koordinaten -> die unter 10 Punkte haben
    [xwert,ywert] = koordinaten_interpolieren(xwert,ywert);
end
sz_x=size(xwert,1);
out=false(size(X));
if (~isInside == true)
    for i=1:sz_x
        out=out | (((X-xwert(i)).^2)+((Y-ywert(i)).^2) <= randdicke*2);
    end
elseif (isInside == true)
    block1=~block1;
    for i=1:sz_x
        out=out | (((X-xwert(i)).^2)+((Y-ywert(i)).^2) <= randdicke*2);
    end
end
out= and(out,block1);
end

function [xnew,ynew]=koordinaten_interpolieren(xwert,ywert)

for n=1:sz
    vektor(index)=(Points(n,:)+Lambda.*(Points(n+1,:)-Points(n,:)));
% das ist hier ist falsch, jedoch will ich das mithilfe der Formel
% v = P1 + Lambda + (P2 -P1) -> mehrere Punkte erstellen von zwei Punkten -> % Lambda ist zum Beispiel von 0 bis 1 in 0.25 Schritten -> Sprich er erstellt mir dann % fünf Punkte, man kann also Lambda variieren. Nur wie  erstelle ich dieses % "Rechteck" (Wenn es indemfall 4 Punkte sind - können ja bis zu 9 sein, wie ich oben % in der IF-Bedingung reingeschrieben habe).  Er soll nur die Nachbar Punkte % berechnen aber nicht die Diagonale ?
    Der Index soll erhöht werden bzw. vlt muss ich das nicht mit dem Index machen. Wie kann ich dann auf die einzelnen x und y werte zugreifen wenn Points Zeilenvektoren sind ?
end
end

   
end
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
JanInfoMed
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 29.08.19
Wohnort: Regensburg
Version: ---
     Beitrag Verfasst am: 07.11.2019, 15:45     Titel: Verbesserung
  Antworten mit Zitat      
Code:
function [xnew,ynew]=koordinaten_interpolieren(xwert,ywert,b)
sz = size(b);
Xi = zeros(sz);
Xi = [xwert,ywert];
len = ((sz(1)-1)*10);
xt = zeros(len,2);
l= 0:.1:1;
for i=1:sz-1
    for j=1:sz*2
        xwertt=Xi(i,1) + l(j)*(Xi(i+1,1) - Xi(i,1));
        ywertt=Xi(i,2) + l(j)*(Xi(i+1,2) - Xi(i,2));
        xt((i-1)*10+j,1)= xwertt;
        xt((i-1)*10+j,2) =ywertt;
    end
   end
  xnew = xt(:,1)
  ynew = xt(:,2)
end


Mit der Formel und der Abspeicherung der Werte, übergebe ich diese Werte später zu meiner Funktion, die für mich die Form ausgibt. Das einzige, was ich noch ändern muss...sind die Halbkreise, die von jeden einzelnen Punkt ausgeht. (siehe Bild)

Aktuell.jpg
 Beschreibung:

Download
 Dateiname:  Aktuell.jpg
 Dateigröße:  338.06 KB
 Heruntergeladen:  186 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
JanInfoMed
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 29.08.19
Wohnort: Regensburg
Version: ---
     Beitrag Verfasst am: 11.11.2019, 12:01     Titel: In Abhängigkeite vom Abstand mein Lambda festlegen
  Antworten mit Zitat      
Ich wollte noch versuchen das Lambda in Abhängigkeit vom Abstand von zwei Punkten berechnet wird. Von diesem Abstand lege ich dann fest, wenn es sich um einen großen Abstand handelt -> nicht so viele Punkte und bei kleinem Abstand -> mehr Punkte.
Jedoch gibt er mir die Fehlermeldung raus, wenn ich den Abstand berechne.
1. Gibt es bei der obigen Beschreibung eine bessere Lösung
und 2. Warum zeigt er mir die Fehlermeldung aus, nur wenn ich den Abstand in d einspeichern will
Index in position 2 exceeds array bounds (must
not exceed 1).

Code:
function [xnew,ynew]=koordinaten_interpolieren(xwert,ywert,b)
sz = size(b);
Xi = [xwert,ywert];
d = zeros(sz);
for i=1:sz
d= (sqrt((xwert(i,1)-xwert(i+1,2)).^2)) + (sqrt((ywert(i,1)-ywert(i+1,2)).^2));
if d(i,1) > 15
    gridabstand = 1;
else
    gridabstand = 0.1;
end                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
l= 0:gridabstand:d;
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
JanInfoMed
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 29.08.19
Wohnort: Regensburg
Version: ---
     Beitrag Verfasst am: 13.11.2019, 14:18     Titel: Die Größe des Cell Array's in Größe der Matrix festlegen
  Antworten mit Zitat      
Ist es möglich die Größe mein Cell Arrays(Lambda) meiner Matrix(xt) zu übergeben, damit die ganzen Werte reinpassen die aus Lambda entstehen(Im Prinzip die Größe der Matrix xt festzulegen)?

Code:

function [xnew,ynew]=koordinaten_interpolieren(xwert,ywert)
sz = size(xwert,1);
Xi = [xwert,ywert];

for i=1:sz-1
distance= sqrt(( xwert(i,1) - xwert(i+1,1) ) ^2 + ( ywert(i,1) - ywert(i+1,1) )^2);
distancesize= 1/distance;  %Abstandsberechnung zwischen zwei Punkten um später Lambda festzulegen
Lambda{i} = 0:distancesize:distance;  %Alle Abstände zwischen zwei Punkte werden in einem Array gespeichert
end
xt = max(Lambda{:});

for i=1:sz-1
     sz_l = size(Lambda{i},2);
     % um schon festzulegen wie groß unser "Vektor" ist, um die Werte nicht immer zu überschreiben
for j=1:sz_l
        xt(j,1)= Xi(i,1) + Lambda{i}(j)*(Xi(i+1,1) - Xi(i,1));  %neue Werte werden berechnet mit Lambda(mehrere Punkte erstellen zwischen zwei Punkten)
        xt(j,2)= Xi(i,2) + Lambda{i}(j)*(Xi(i+1,2) - Xi(i,2));
end

  xnew = xt(:,1) % Neue Werte werden übergeben die in xt eingespeichert sind
  ynew = xt(:,2)

end
end
Private Nachricht senden Benutzer-Profile anzeigen
 
JanInfoMed
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 29.08.19
Wohnort: Regensburg
Version: ---
     Beitrag Verfasst am: 19.11.2019, 15:27     Titel: Endlich.. nach langer Tüftelei, hat es geklappt
  Antworten mit Zitat      
Code:
function [xnew,ynew]=koordinaten_interpolieren(xwert,ywert)
sz = size(xwert,1);
Xi = [xwert,ywert];
Lambda = cell(sz-1,1);
sz_ges=0;

for i=1:sz-1
distance= sqrt(( xwert(i,1) - xwert(i+1,1) ) ^2 + ( ywert(i,1) - ywert(i+1,1) )^2);
distancesize= 1/distance;
 %Abstandsberechnung zwischen zwei Punkten um später Lambda festzulegen
Lambda{i} = 0:distancesize:distance;  
%Alle Abstände zwischen zwei Punkte werden in einem Array gespeichert
sz_ges=sz_ges+size(Lambda{i},2);
end
 xnew = sz_ges;
 % um schon festzulegen wie groß unser "Vektor" ist,um die Werte nicht immer zu überschreiben
 ynew = sz_ges;
 index = 0;
for i=1:sz-1
    sz_l = size(Lambda{i},2);
   
       
     for j=1:sz_l
        xt(j+index,1)= Xi(i,1) + Lambda{i}(j)*(Xi(i+1,1) - Xi(i,1));  
     % neue Werte werden berechnet mit Lambda(Abstände zwischen zwei Punkten
        xt(j+index,2)= Xi(i,2) + Lambda{i}(j)*(Xi(i+1,2) - Xi(i,2));
   
end
     index = index +sz_l;

     xnew = xt(:,1);
     ynew = xt(:,2);
    % Neue Werte werden übergeben die in xt eingespeichert sind
end
 
end


Unbenannt.jpg
 Beschreibung:

Download
 Dateiname:  Unbenannt.jpg
 Dateigröße:  299.96 KB
 Heruntergeladen:  180 mal
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.