Verfasst am: 11.02.2009, 10:09
Titel: Fläche rastern
Hallo,
ich (Matlabanfänger) möchte gerne eine Kreisrunde Fläche in mehrere kleine quadratische Flächen unterteilen, von denen ich dann die x- und y-Koordinate (des Mittelpunktes) in einer Matrix stehen habe. Mit diesen Koordinaten sollen dann weitere Berechnungen durchgeführt werden.
Die Quadrate sollen jedes Flächenelement der Kreisfläche Abdecken, auch wenn sie über den Rand hinausgehen.
Zur Visualierung des "Problem" hab ich mal ein Bild vorbereitet.
Vielen Dank schon mal im Voraus.
Verfasst am: 11.02.2009, 12:15
Titel: Fläche rastern
Der Kreis liegt als Mittelpunkt und Radius vor.
r=5mm
Mittelpunkt (0/0)
Die Kantenlängen der quadrate sollen beliebig, je nach Auflösegenauigkeit sein.
Das Ergebnis soll ein zweispaltiger Vektor mit x- und y-koordinaten der Rastermittelpunkte sein, richtig?
Gedanklich würde ich dazu erstmal ein Quadrat um den Kreis legen, in das der Kreis genau reinpasst. Dann Rasterbreite und Rasterhöhe definieren. Jetzt ein Rasterstückchen in einer doppelt verschachtelten Schleife über das gedachte Quadrat verschieben in dem der Kreis liegt.
Über die Gleichung r_raster^2 = x^2 + y^2 bekommst Du raus, ob der Mittelpunkt des aktuell behandelten Rasters im/auf dem Kreis liegt oder außerhalb. Drinnen liegt er immer dann, wenn r_raster <= r_kreis ist. Wenn der Mittelpunkt im oder auf dem Kreis liegt kannst Du die aktuellen Zählvariablen als x- und y-koordinate abspeichern, wenn nicht, wird das Rasterstückchen einfach ignoriert.
% Kreisdefinition mit Radius r
r = 5;
phi = linspace(0,2*pi);
xKreis = r*cos(phi);
yKreis = r*sin(phi);
plot(xKreis,yKreis,'r');
axis([-r-1 r+1 -r-1 r+1]);
axis equal;
hold on;
grid on;
% Bestimmen der Punkte eines bestimmten Rasters, die innerhalb des Kreises % liegen
Raster = 0.5;
x = 0:Raster:r+Raster;
y = 0:Raster:r+Raster;
x = [-x,x];
y = [-y,y];
n=1;
for i=1:length(x) for j=1:length(y) if x(i)^2+y(j)^2 <= r^2
M(n,1:2) = [x(i),y(j)];
n = n+1;
end end end plot(M(:,1),M(:,2),'s','MarkerSize',5)
Bestimmt nicht die beste Lösung aber funktioniert. M ist dann deine Matrix wo alle Punkte drinstehen.
Ich denke mal, dass es nicht um die Zeichnung geht, wo man schön die Quadrate erkennt sondern eher um die Daten, also die Matrix M. Weil wenn du genau die Quadrate mit der entsprechenden Kantenlänge haben willst, dann musst du da noch einiges dran rumschrauben.
Hallo, ich noch mal!
Das ganze würde ich jetzt gerne auch für ein Trapez machen, aber da fehlen mir die mathematischen Formeln zu.
Ich würde es ansonsten genauso angehen, oder?
Es soll ein symmetrisches Trapez sein mit Kantenlänge a und c, sowie Höhe h. (Die Seiten haben einen Winkel von 45°). Das lege ich mir wieder in ein Rechteck rein mit der Kantenlänge a (längere Kante).
Aber wie ist denn jetzt die Abfrage, ob der Punkt (X,Y) im oder außerhalb des Trapezes liegt?
Vielen Dank schon mal.
Zuletzt bearbeitet von Katsche am 12.03.2009, 11:39, insgesamt einmal bearbeitet
ich würde für die Seiten des Trapezes Geradengleichungen formulieren. Für einen Punkt im Trapez sind dann vier Ungleichungen gültig: Er liegt jeweils über und unter zwei der Geraden. Aus den vier Ungleichungen kann man ein Ungleichungssystem aufstellen (Matrix*Punktvektor<=Vektor). Wenn jede Zeile den Wahrheitswert "wahr" ergibt, liegt der Punkt im Trapez.
Noch eine Anmerkung: Die Kantenlänge des Rechtecks muss aber länger sein als a. Das sieht man leicht, wenn man es sich kurz aufmalt. Genauer muss das Rechteck die Maße (a+h)xh haben, wenn der Winkel 45° hat.
Danke für die Schnelle Antwort, aber noch eine Bitte.
Die Geradengleichungen krieg ich wohl noch hin, aber den Rest kann ich nicht so recht nachvollziehen. Könnte ich ein kleines Beispiel bekommen?
Danke...
Ich habe nochmal eine Frage zum Thema Rastern aller Punkte innerhalb eines Trapez.
Wie binde ich denn die Bedingung für das Rastern des Trapez in den oben geposteten Code für den Kreis ein.
Und wie kann ich das alles für ein Dreieck übernehmen?
% Bestimmen der Punkte eines bestimmten Rasters, die innerhalb des Dreiecks % liegen
Raster = 0.5;
x = 0:Raster:r+Raster;
y = 0:Raster:r+Raster;
x = [-x,x];
y = [-y,y];
n=1;
for i=1:length(x) for j=1:length(y)
P=[x(i) y(j)];
%%Start Check PointInTriangle
% Erzeugt die Vektoren
v0 = C - A;
v1 = B - A;
v2 = P - A;
Hey,
jetzt hat sich doch noch ein neues Problem aufgetan.
Wenn ich das geschrieben Programm übertragen will auf andere Werte, die alle in x und y Richtung positiv, wie zum Beispiel:
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.