Verfasst am: 22.10.2019, 11:07
Titel: Berechnung d. Strecke mit 2 Punkten in einem Vektor speicher
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.
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,, ist das immer gegeben?
function out = Randerzeugen(xwert,ywert,X,Y,isInside,block1,randdicke) ifsize(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
for n=1:sz
function out = Randerzeugen(xwert,ywert,X,Y,isInside,block1,randdicke) ifsize(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
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
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)
Verfasst am: 11.11.2019, 11:01
Titel: In Abhängigkeite vom Abstand mein Lambda festlegen
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
Verfasst am: 13.11.2019, 13:18
Titel: Die Größe des Cell Array's in Größe der Matrix festlegen
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)
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));
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
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.