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 basierend auf Geraden zwischen 2 Kurvenzügen

 

MTLB-newbie
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 13.04.23
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.04.2023, 09:31     Titel: Fläche basierend auf Geraden zwischen 2 Kurvenzügen
  Antworten mit Zitat      
Zuerst Hallo - ich bin neu hier im Forum und suche für eine Matlab-Aufgabe eine Hilfestellung.

Kurz gefasst, zwischen 2 Kurvenzügen soll eine Fläche erzeugt werden, deren Erzeugenden Geraden sind. Ein Kurvenzug ist ein Kreis, der zweite besteht aus einem Halbkreis und 3 Strecken, die rechtwinkelig zueinander angeordnet sind.

Die Kurvenzüge als Begrenzungen oben/unten habe ich erstellt und das sieht wie im Anhang aus. Nun sollen diese verbunden werden.

Dazu habe ich eine Funktion gefunden, die das erledigen soll.
Code:
function [X, Y, Z] = ErzeugeStrahlflaeche(kreis_k1, halbkreis_oben, m)
 u = transpose(linspace(0,1,m));
 X = (1-u)*kreis_k1(1,:) + u*halbkreis_oben(1,:);
 Y = (1-u)*kreis_k1(2,:) + u*halbkreis_oben(2,:);
 Z = (1-u)*kreis_k1(3,:) + u*halbkreis_oben(3,:);
end


Code:
kreis_k1 = plot3(x2,y2,z2) %Der kreis_k1 ist defniert in der XZ-Ebene liegend (Y-Werte = 0)

Code:
halbkreis_oben = plot3(x1,y1,z1);%Beim Halbkreis oben, der in der XY-Ebene liegt, sind die Z-Werte = 0

Matlab zeigt einen Fehler an "Not enough input arguments."

Zudem, mit dieser Funktion werden nur die Kreise bzw. Halbkreise verbunden. Wie verbinde ich die Strecken (siehe Bild im Anhang) mit dem Kreis?

ausgangsbasis.jpg
 Beschreibung:

Download
 Dateiname:  ausgangsbasis.jpg
 Dateigröße:  70.72 KB
 Heruntergeladen:  112 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.04.2023, 12:10     Titel:
  Antworten mit Zitat      
Hallo,

ich kann das ganze noch nicht ganz nachvollziehen.
Wie entstehen z.B. bei den plot3-Befehlen die Variablen x1, y1, z1?
Welche Zeile erzeugt den genannten Fehler?

In welcher Form soll denn die Verbindung erfolgen? Soll das eine Art Zylinder werden?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
MTLB-newbie
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 13.04.23
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.04.2023, 12:40     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

ich kann das ganze noch nicht ganz nachvollziehen.
Wie entstehen z.B. bei den plot3-Befehlen die Variablen x1, y1, z1?
Welche Zeile erzeugt den genannten Fehler?

In welcher Form soll denn die Verbindung erfolgen? Soll das eine Art Zylinder werden?

Grüße,
Harald


Diese Variablen parametrisieren den Halb-Kreis in der XY-Ebene (z=0)
Code:

x1 = a*cos(t1);
y1 = a*sin(t1);
z1 = a*0*t1;


Ja, es soll eine Art Zylinder werden. Die beiden Kurvenzüge sollen einfach durch Geraden verbunden werden, sodass eine zylindrische Figur entsteht.
Private Nachricht senden Benutzer-Profile anzeigen
 
MTLB-newbie
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 13.04.23
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.04.2023, 13:39     Titel:
  Antworten mit Zitat      
Ich habe (zwischenzeitlich) viel Herumprobiert sowie gesucht und eine Anleitung für eine Verbindungsfläche von Kreis zu Ellipe gefunden.

Code:
clear all
        close all
        clc
        n = 70;
        r = 100; %Radius des Halbkreises
        c = 100; %Mittelpunktversatz des Halbkreises
        %linke Hälfte des Halbkreises erzeugen
        t = linspace(pi/2,0,n);
        Kreis1=[r*cos(t);-c+r*sin(t);0*t];
        %rechte Hälfte des Halbkreises erzeugen
        t = linspace (pi, pi/2,n);
        Kreis2 = [r*cos(t);-c+r*sin(t);0*t];
        %Geraden generieren
        u = linspace(-100,100,n);
        G=[u;-r+0*u;0*u];
b=40; c=60;
        %Rechte Hälfte der Ellipse erzeugen
        z=linspace(0,pi,n);
        Ellipse1 = [b*sin(z);60*cos(z);c-c*cos(z)];
        %Linke Hälfte der Ellipse erzeugen
        w=linspace(pi,2*pi,n);
        Ellipse2 = [b*sin(w);60*cos(w);c-c*cos(w)];
        %Punkte erzeugen
        p = [b*sin(pi);60*cos(pi);c-c*cos(pi)];
        %Mantelfläche aus Ellipse +  Kreis + Punkte bilden
m=30;
        [X, Y, Z] = createRuledSurfaceMesh (Kreis1, Ellipse1,m);
        [X1, Y1, Z1] = createRuledSurfaceMesh (Kreis2, Ellipse2,m);
        [X2, Y2, Z2] = createRuledSurfaceMesh (p, G,m);
        s = surf(X, Y, Z);
        hold on
        s1 = surf(X1, Y1, Z1);
        hold on
        s2 = surf (X2, Y2, Z2);
        view([-30,30,20]);
        axis equal;


Dabei ist die Funktion createRuledSurfaceMesh definiert als:
Code:
function [X, Y, Z] = createRuledSurfaceMesh(P1, P2, m)
 u = transpose(linspace(0,1,m));
 X = (1-u)*P1(1,:) + u*P2(1,:);
 Y = (1-u)*P1(2,:) + u*P2(2,:);
 Z = (1-u)*P1(3,:) + u*P2(3,:);
end


Ein Bild habe ich auch angefügt, was das Skript ergibt. Das sieht schon ganz passend aus für meine Bedürfnisse. Jedoch, ich versuche es abzuändern auf mein Problem, schaffe es aber nicht.

Bildschirmfoto 2023-04-13 um 13.14.51.png
 Beschreibung:
Ergebnis des oben genannten Matlab-Skripts

Download
 Dateiname:  Bildschirmfoto 2023-04-13 um 13.14.51.png
 Dateigröße:  124.5 KB
 Heruntergeladen:  93 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.04.2023, 16:25     Titel:
  Antworten mit Zitat      
Hallo,

und wie hast du bis jetzt versucht, das abzuändern?

Zitat:
Die beiden Kurvenzüge sollen einfach durch Geraden verbunden werden, sodass eine zylindrische Figur entsteht.

Dann würde ich auf der einen Kurve n Punkte berechnen lassen, ebenso auf der anderen, und dann n Geraden erstellen. Wichtig dürfte sein, alle Teile der beiden Kurvenzüge jeweils zusammenzufassen, so dass jeder Kurvenzug durch 3 Vektoren x, y, z beschrieben wird.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
MTLB-newbie
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 13.04.23
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.04.2023, 07:20     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

und wie hast du bis jetzt versucht, das abzuändern?

Zitat:
Die beiden Kurvenzüge sollen einfach durch Geraden verbunden werden, sodass eine zylindrische Figur entsteht.

Dann würde ich auf der einen Kurve n Punkte berechnen lassen, ebenso auf der anderen, und dann n Geraden erstellen. Wichtig dürfte sein, alle Teile der beiden Kurvenzüge jeweils zusammenzufassen, so dass jeder Kurvenzug durch 3 Vektoren x, y, z beschrieben wird.

Grüße,
Harald

Ja, genau. Wie erstelle ich diese Punkte auf den Kurvenzügen bzw. die Vektoren dazu? Ich denke, da happert es. bzw. wie fasse ich die Kurvenzüge zusammen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.04.2023, 09:19     Titel:
  Antworten mit Zitat      
Hallo,

um dir dabei konkret weiterhelfen zu können wäre es gut, den kompletten Code in reproduzierbarer Form zu haben.

Allgemein:
Die Punkte hast du im Grunde schon - das ist das, was du plottest. Wenn es gewünscht ist, dass die Punkte gleichen Abstand zueinander haben, ist das eine kleine Herausforderung.

Zusammenfassen von Zeilenvektoren:
Code:
x = [x1, x2, x3];


Zusammenfassen von Spaltenvektoren:
Code:
x = [x1; x2; x3];


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
MTLB-newbie
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 13.04.23
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.04.2023, 09:27     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

um dir dabei konkret weiterhelfen zu können wäre es gut, den kompletten Code in reproduzierbarer Form zu haben.

Pardon, habe ich nun eingefügt:
Meine Überlegung ist nun, Halbkreis mit Halbkreis zu verbinden und dann die 3 Strecken mit dem anderen Halbkreis. Daher habe ich den zuvor als kompletten unteren Kreis halbiert. Nur als Hinweis.
Code:
% Parametrisierung des oberen Halbkreises & Ausgabe

a=1; %Radius des Kreises vom oberen Kurvenzug (Halbkreis)  
n=100; %Anzahl der Elemente auf dem Halb-Kreis bzw. den Geradenstücken
t1 = linspace(pi,2*pi,n); %gleichmäßige Unterteilung von Punkten auf dem Halbkreis

x1 = a*cos(t1);
y1 = a*sin(t1);
z1 = a*0*t1;

halbkreis=[a*cos(t1);a*sin(t1);0*(t1)];

halbkreis_oben = plot3(x1,y1,z1);
set(halbkreis_oben, 'Color', [0, 0, 0], 'LineWidth', 3);

hold on

%Parametrisierung der Strecke CE/Geradenstücks & Ausgabe

C=[-1;0;0];
E=[-1;1;0];
t2 = linspace(0,1,n);

xCE = C(1)+t2*(E(1)-C(1));
yCE = C(2)+t2*(E(2)-C(2));
zCE = C(3)+t2*(E(3)-C(3));

CE = [xCE;yCE;zCE];
strecke_CE = plot3(xCE,yCE,zCE);
set(strecke_CE, 'Color', [1, 0.5, 0], 'LineWidth', 3);

hold on

%Parametrisierung der Strecke HG/Geradenstücks & Ausgabe

H=[1;0;0];
G=[1;1;0];

xHG = H(1)+t2*(G(1)-H(1));
yHG = H(2)+t2*(G(2)-H(2));
zHG = H(3)+t2*(G(3)-H(3));

HG = [xHG;yHG;zHG];
strecke_HG = plot3(xHG, yHG,zHG);
set(strecke_HG, 'Color', [0, 0, 1], 'LineWidth', 3);

hold on

%Parametrisierung der Strecke EG/Geradenstücks & Ausgabe

xEG = E(1)+t2*(G(1)-E(1));
yEG = E(2)+t2*(G(2)-E(2));
zEG = E(3)+t2*(G(3)-E(3));

EG = [xEG;yEG;zEG];
strecke_EG = plot3(xEG, yEG,zEG);
set(strecke_EG, 'Color', [1, 0, 0], 'LineWidth', 3);

hold on


%Parametrisierung des unteren Halb-Kreises k1

b=2; %Radius des Kreises vom oberen Kurvenzug (Halbkreis)
offset_z=-6; %Versatz vom Ursprung in z-Richtung
offset_y=5; %Versatz vom Ursprung y-Richtung
t3 = linspace(pi,2*pi,n); %gleichmäßige Unterteilung von Punkten auf dem Halbkreis

x2 = b*cos(t3);
y2 = offset_y+b*0*t3;
z2 = offset_z+b*sin(t3);

unterer_Halbkreis_k1 = [x2;y2;z2];
kreis_k1 = plot3(x2,y2,z2);
set(kreis_k1, 'Color', [0.5, 0, 0.4], 'LineWidth', 3);

hold on



axis vis3d; axis equal;
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.04.2023, 09:55     Titel:
  Antworten mit Zitat      
Hallo,

ein Versuch:
Code:
% Teil 1: x1,y1,z1 (erst mal nicht)
% Teil 2: xCE;yCE;zCE
% Teil 3: xHG, yHG,zHG
% Teil 4: xEG, yEG,zEG
x = [xCE, xEG, xHG];
y = [yCE, yEG, yHG];
z = [zCE, zEG, zHG];

% n = Verfeinerung (Teiler von 100)
n = 1;
hold on
plot3([x(1:3*n:end); x2(1:n:end)], [y(1:3*n:end); y2(1:n:end)], [z(1:3*n:end); z2(1:n:end)], "k")
hold off


Es kann sein, dass die Stücke in anderer Reihenfolge zusammengefügt oder mit fliplr gespiegelt werden müssen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
MTLB-newbie
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 13.04.23
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.04.2023, 13:24     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

ein Versuch:
Code:
% Teil 1: x1,y1,z1 (erst mal nicht)
% Teil 2: xCE;yCE;zCE
% Teil 3: xHG, yHG,zHG
% Teil 4: xEG, yEG,zEG
x = [xCE, xEG, xHG];
y = [yCE, yEG, yHG];
z = [zCE, zEG, zHG];

% n = Verfeinerung (Teiler von 100)
n = 1;
hold on
plot3([x(1:3*n:end); x2(1:n:end)], [y(1:3*n:end); y2(1:n:end)], [z(1:3*n:end); z2(1:n:end)], "k")
hold off


Es kann sein, dass die Stücke in anderer Reihenfolge zusammengefügt oder mit fliplr gespiegelt werden müssen.

Grüße,
Harald

Danke erstmals, das sieht schon ganz gut aus. Wie du aber schreibst, die Reihenfolge passt nicht ganz.

Ich verstehe die Zeile:
Code:
plot3([x(1:3*n:end); x2(1:n:end)], [y(1:3*n:end); y2(1:n:end)], [z(1:3*n:end); z2(1:n:end)], "k")
nicht ganz. Hier werden die erzeugten Vektoren x, y, z mit x2, y2 und z2 verknüpft grafisch.

Jedoch, es werden nun der untere Halbkreis mit den Geraden verbunden, was falsch ist. Ich habe nun versucht, den unteren Halbkreis zu spiegeln (nach oben), sodass dieser von 0-PI verläuft, anstatt von PI bis 2xPI. Aber, dabei werden leider die Streckenteile falsch verbunden, siehe Anhang. Ansonsten passt es mal.
Jetzt müssen die restlichen beiden Halbkreise noch verbunden werden und das war's dann schon.

Flächen-XZ-Ebene.png
 Beschreibung:

Download
 Dateiname:  Flächen-XZ-Ebene.png
 Dateigröße:  37.45 KB
 Heruntergeladen:  100 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.04.2023, 14:30     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Jedoch, es werden nun der untere Halbkreis mit den Geraden verbunden, was falsch ist.

Dein Code enthielt ja nur den unteren Halbkreis. Oder ist an der Verbindung etwas falsch? Wenn ja, was?

Zitat:
Ich habe nun versucht, den unteren Halbkreis zu spiegeln (nach oben), sodass dieser von 0-PI verläuft, anstatt von PI bis 2xPI. Aber, dabei werden leider die Streckenteile falsch verbunden

Bitte poste deinen aktuellen Code. Durch Variieren der Reihenfolge oder Anwendung von fliplr auf Teile des Vektors sollte sich das Problem beheben lassen. Das sollte für dich einfacher sein als für mich, da du weißt, wie die Verbindung "richtig" sein muss.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
MTLB-newbie
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 13.04.23
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.04.2023, 16:36     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,
Bitte poste deinen aktuellen Code. Durch Variieren der Reihenfolge oder Anwendung von fliplr auf Teile des Vektors sollte sich das Problem beheben lassen. Das sollte für dich einfacher sein als für mich, da du weißt, wie die Verbindung "richtig" sein muss.

Grüße,
Harald

Vorneweg, ich hab's durch viel Herumprobieren geschafft. Ergebnis siehe Grafik im Anhang.
Ich hätte noch ein paar Fragen zur Grafik/Darstellung:
kann ich diese Farben der Flächen ändern? Wie?

verbindungsstrahlflaeche (1).pdf
 Beschreibung:

Download
 Dateiname:  verbindungsstrahlflaeche (1).pdf
 Dateigröße:  174.41 KB
 Heruntergeladen:  108 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.04.2023, 16:55     Titel:
  Antworten mit Zitat      
Hallo,

sieht nett aus! :)
Generell wird die Farbgebung über colormap gesetzt.

Ich würde auch das versuchen:
Code:

Dürfte nochmal cooler aussehen damit.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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.