ich stehe vor einem kleinen Problem, was für einige von euch wahrscheinlich relativ trivial ist...
Es geht um Folgendes, ich möchte prüfen, ob die Schnittmenge des Inneren (also ohne Rand) zweier Boxen (im R^2) leer oder nicht leer ist und eine entsprechende Funktion schreiben.
Für den Fall, dass der Schnitt nicht leer ist, sollte die Funktion die Schnitt-Box ausgeben (allerdings mit Rand).
1-D Beispiel : box1=[1,2], box2=[2,3] -> Schnittmenge des Inneren ist leer (da 2 auf den Rand beider Boxen liegt) box1=[1,3], box2=[2,4] -> Scnittmenge des Inneren ist nicht leer. Schnittbox ist [2,3] (mit Rand)
Ich habe schon mit dem Befehl intersect experimentiert und versucht das Ganze mit einer if Schleife zu lösen, bisher aber ohne Erfolg, deshalb hoffe ich nun auf professionelle HILFE!!!
Zwei 3D-Boxen überschneiden sich, wenn sie sich in allen drei Dimensionen überschneiden. Also wäre die Lösung für den 1D-Fall schon sehr hilfreich.
Es gibt weder in Matlab noch in anderen mir bekannten Programmiersprachen eine "IF-Schleife".
INTERSECT testet, ob sich in zwei Vektoren gleiche Elemente befinden. Das ist für Deine Fragestellung also ungeeignet.
RECTINT berechnet die Fläche der Überschneidung bei 2D-Rechtecken, also auch nicht gut geeignet.
Aber die Überlappung bei box1=[a1,b1] und box2=[a2,b2] festzustellen ist nicht schwierig. Versuche es nochmal und poste den Code, wenn Du Verbesserungsvorschläge benötigst.
du hast natürlich recht, es gibt keine IF-Schleife
ich meinte ein IF-Statement
deine Tipps waren erstmal sehr hilfreich für mich , ich hatte mich zu sehr auf INTERSECT fixiert und bin deshalb nicht recht weiter gekommen...
Soweit habe ich jetzt erstmal einen neuen Code geschrieben, der mir sagt, ob eine Schnittmenge vorhanden ist. (hoffe ich zumindest)
Mir fehlt jetzt nurnoch der letzte Punkt, ich möchte, dass für denn Fall, dass der Schnitt nicht leer ist, die Funktion die Schnitt-Box ausgibt (incl. Rand).
(für unbekannte Variablen sei gesagt, der Code ist nur ein Teilausschnitt)
hier ist erstmal mein Code:
(Teil1)
Code:
function[D1,D2]=checkIfIntersectionOfTwoBoxesIsEmpty(box1,box2,n)
D1=zeros(1,1,n); % D1 und D2 sind jeweils Boxen in denen an dritter Stelle n als eine Art Nummerierung durchläuft, das gilt für jedes n das auftaucht
D2=zeros(1,1,n);
for i=1:n;
D1(:,:,n)=box2(1,1,n)-box1(1,2,n);
D2(:,:,n)=box2(2,1,n)-box1(2,2,n);
end end
Naja, soweit ganz annehmbar, doch ich weiß einfach nicht, wie ich es hinkriegen kann, dass jetzt anhand von "isEmpty" = 1 oder 0 die jeweiligen Stellen meiner neuen Box generiert werden können.
müsste ja dann eigentlich an den jeweiligen Stellen "isEmpty" = 0 sein.
Code:
box3=zeros(2,2,n);
for j=1:n
for f= isEmpty=0% soweit der gedachte Vorgang, aber ist natürlich Mist, so wies jetzt ist
box3(:,:,j)=[min(box1(:,:,f)),max(box2(:,:,f))] end end
Soll quasi bedeuten, an den Stellen, wo isEmpty gleich Null ist, soll einen neue Box generiert werden.
Ich hoffe, dass ich mein Problem einigermaßen anschaulich beschrieben konnte, hoffe auf erneute gute Hilfe und bedanke mich mit gutem Gewissen schonmal im Voraus =)
Grüße mlafunk
p.s.: da es sich um einen Auszug meines gesamten Codes handelt, habe ich evtl. vergessen einige Passagen ausreichend zu beschrieben, wenn noch was unklar ist, würde ich das gerne noch versuchen besser zu erklären
Einstellungen und Berechtigungen
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.