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

Fläche rastern

 

Katsche
Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 27.01.09
Wohnort: Bremen
Version: ---
     Beitrag Verfasst am: 11.02.2009, 10:09     Titel: Fläche rastern
  Antworten mit Zitat      
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.

mfg Katsche

quad_kreis.JPG
 Beschreibung:

Download
 Dateiname:  quad_kreis.JPG
 Dateigröße:  20.18 KB
 Heruntergeladen:  685 mal
Private Nachricht senden Benutzer-Profile anzeigen


Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.02.2009, 12:07     Titel:
  Antworten mit Zitat      
Als was liegt denn der Kreis vor? Als Bild? Oder von Dir per Mittelpunkt und Radius definiert?
Private Nachricht senden Benutzer-Profile anzeigen
 
Katsche
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 27.01.09
Wohnort: Bremen
Version: ---
     Beitrag Verfasst am: 11.02.2009, 12:15     Titel: Fläche rastern
  Antworten mit Zitat      
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.

mfg
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.02.2009, 12:30     Titel:
  Antworten mit Zitat      
Ok, das macht die Sache einfacher...

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.

(sieht dann so ähnlich aus wie hier: http://www.gomatlab.de/faserverteil.....servlies-t4979.html#17664 )
Private Nachricht senden Benutzer-Profile anzeigen
 
Katsche
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 27.01.09
Wohnort: Bremen
Version: ---
     Beitrag Verfasst am: 11.02.2009, 12:40     Titel:
  Antworten mit Zitat      
Danke, dass hört sich ersteinmal gut an und wird mich für einige Zeit beschäftigen. Ich werde das ausprobieren und Erfolg oder Misserfolg melden.

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Strauße
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 07.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.02.2009, 12:49     Titel:
  Antworten mit Zitat      
Code:

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

Viel Spass damit! Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
Katsche
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 27.01.09
Wohnort: Bremen
Version: ---
     Beitrag Verfasst am: 11.02.2009, 15:28     Titel:
  Antworten mit Zitat      
Danke für die schnelle Hilfe! Läuft wunderbar!
@Strauße: Ich brauche nur die Mittelpunkte und kein Bild, genauso meinte ich es. Danke!
Private Nachricht senden Benutzer-Profile anzeigen
 
Katsche
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 27.01.09
Wohnort: Bremen
Version: ---
     Beitrag Verfasst am: 12.03.2009, 11:25     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 12.03.2009, 11:39     Titel:
  Antworten mit Zitat      
Hallo Katsche,

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.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Katsche
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 27.01.09
Wohnort: Bremen
Version: ---
     Beitrag Verfasst am: 12.03.2009, 11:49     Titel:
  Antworten mit Zitat      
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...
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 12.03.2009, 12:15     Titel:
  Antworten mit Zitat      
Hallo Katsche,

na klar. Wenn die Gleichungen so aussehen

p1(x) = 3x + 1
p2(x) = 3x + 3
p3(x) = -x + 2
p4(x) = -x + 4

dann muss ein Punkt (x,y) im Inneren sowohl zwischen p1 und p2 als auch zwischen p3 und p4 liegen. Also muss gelten:

y >= 3*x + 1
y <= 3*x + 3
y >= -x + 2
y <= -x + 4

Jetzt muss man die Ungleichheitszeichen vereinheitlichen und die Variablen auf eine Seite stecken:

3x - y <= -1
-3x + y <= 3
-x - y <= -2
x + y <= 4

In Matrixform:

Code:
| 3  -1|                 |-1|
|-3   1|   *   |x|   <=  | 3|
|-1  -1|       |y|       |-2|
| 1   1|                 | 4|


und in Matlabcode:

Code:
A = [3 -1;-3 1;-1 -1;1 1];
b = [-1;3;-2;4];
...
if all(A*[x(i);y(j)]<=b)
    M(n,1:2) = [x(i),y(j)];
    n = n+1;
end


Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Katsche
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 27.01.09
Wohnort: Bremen
Version: ---
     Beitrag Verfasst am: 12.03.2009, 12:24     Titel:
  Antworten mit Zitat      
Logisch, wär ich aber im Leben nicht drauf gekommen.
Vielen, vielen Dank! Rolling Eyes
Private Nachricht senden Benutzer-Profile anzeigen
 
Joa
Forum-Century

Forum-Century


Beiträge: 133
Anmeldedatum: 19.05.09
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 16.06.2010, 09:00     Titel:
  Antworten mit Zitat      
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?

Vielen Dank schonmal
LG Joa
Private Nachricht senden Benutzer-Profile anzeigen
 
Joa
Forum-Century

Forum-Century


Beiträge: 133
Anmeldedatum: 19.05.09
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 16.06.2010, 10:41     Titel:
  Antworten mit Zitat      
So, ich habe mein Problem für das Rastern von Dreiecken jetzt wie folgt gelöst:
Code:

function RasterDreieck
Points=[-1 -1;-1 3;1 1];
cor=[Points(:,1)';Points(:,2)'];

%Bildet den Umkreis um ein Dreieck mit cor=[x_koordinaten;y_koordinaten]
[r,cn] = circumcircle(cor); % Bei Matlabfileexchange erhältlich

A=[-1 -1];
B=[-1 3];
C=[1 1];

plot(Points(:,1),Points(:,2),'*b');

drei=[-1 -1;-1 3;1 1;-1 -1];

hold all;
line(drei(:,1),drei(:,2),'Color','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 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;

        % Erzeugt das Skalarprodukt der Vektoren
        dot00 = dot(v0, v0);
        dot01 = dot(v0, v1);
        dot02 = dot(v0, v2);
        dot11 = dot(v1, v1);
        dot12 = dot(v1, v2);

        % Erzeugt die baryzentrischen Koordinaten
        invDenom = 1 / (dot00 * dot11 - dot01 * dot01);
        u = (dot11 * dot02 - dot01 * dot12) * invDenom;
        v = (dot00 * dot12 - dot01 * dot02) * invDenom;

        % Überprfüt ob der Punkt im Dreieck liegt
        if (u >= 0) && (v >= 0) && (u + v <= 1)
            M(n,1:2) = [x(i),y(j)];
            n = n+1;
        end

        %%Ende Check PointInTriangle
    end
end
plot(M(:,1),M(:,2),'s','MarkerSize',5)
 


Vielleicht hilft es ja noch jemand weiter.
LG Joa
Private Nachricht senden Benutzer-Profile anzeigen
 
Joa
Forum-Century

Forum-Century


Beiträge: 133
Anmeldedatum: 19.05.09
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 16.06.2010, 11:53     Titel:
  Antworten mit Zitat      
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:
Code:

Points=[1 4;1 1;4 4];
 

Bekomme ich immer die Fehlermeldung:
Code:

??? Undefined function or variable "M".
 


Ich denke es liegt an dem Teil:
Code:

x = 0:Raster:r+Raster;
y = 0:Raster:r+Raster;
 


Ich möchte das grüne Dreieck auf dem Bild rastern.

Kann mir bitte jemand helfen?
LG Johanna

Ratser1.jpg
 Beschreibung:

Download
 Dateiname:  Ratser1.jpg
 Dateigröße:  15.85 KB
 Heruntergeladen:  609 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 - 2025 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.