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

Verschneidung von Graphen

 

Max1
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 12.11.22
Wohnort: nähe Wien
Version: ---
     Beitrag Verfasst am: 12.11.2022, 12:16     Titel: Verschneidung von Graphen
  Antworten mit Zitat      
Hallo liebe Forum-Mitglieder!

Als Matlab-Neuling stehe ich im Zuge einer Steinschlagsimulation vor dem Problem meine Flugtrajektorien mit der Funktion des Steinschlagschutznetztes zu verschneiden. Hierbei sollen alle Flugbahnen welche das Netz treffen dort enden, alle anderen weiterlaufen bis diese die Böschung erreichen.

Die Flugbahnen sind hierbei in einer großen Matrix 1000x151 definiert.
Die Netzgerade ist in einer identisch großen Matrix definiert mit der Netzhöhe als Maximalwert begrenzt.

Die unten angeführte Verschneidung mit dem Netz funktioniert leider nur teilweise, und schneidet nur das abgebildete Dreieck heraus.

Gibt es eine andere Lösungsmöglichkeit zur Realisierung der Verschneidung?

Vielen Dank für die Hilfe!



Code:


%Netzgerade
Netz_y1_M=ones(n,1)*Netz_y1;
Netz_y1_M(Netz_y1_M>max(Netz_y))=[NaN];

%Böschungsschnitt
yPar(yPar<y1)=[NaN];

%Netzschnitt
yPar(yPar<Netz_y1_M)=[NaN];

 


Steinschlag.PNG
 Beschreibung:
Der hier markierte Bereich sollte ebenfalls wegfallen.

Download
 Dateiname:  Steinschlag.PNG
 Dateigröße:  128.64 KB
 Heruntergeladen:  117 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: 12.11.2022, 16:03     Titel:
  Antworten mit Zitat      
Hallo,

du kannst find(..., 1) verwenden, um für jede Trajektorie das Ende zu ermitteln. Dann musst du alle folgenden Elemente auf NaN setzen.

Für weitere Unterstützung poste bitte die Daten und den kompletten Code, inkl. der Erzeugung des Plots. Dann kann man die Zusammenhänge besser nachvollziehen.

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
 
Max1
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 12.11.22
Wohnort: nähe Wien
Version: ---
     Beitrag Verfasst am: 12.11.2022, 18:20     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für die schnelle Rückmeldung!
Mit find bekomme ich es leider auch nicht hin. Mein Problem ist, dass ich es nicht schaffe meine yPar Matrix so zu definieren, dass sobald ein NaN in der Zeile vorkommt alle weiteren Elemente dieser Zeile ebenfalls NaN sein sollen.

Folgend mein gesamter Code:

Code:

clc
clear all
tic
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%  Steinschlagsimulation ab ersten Abprall auf Böschung %%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%Zufallswinkel mit 37 Mittelwert
alpha=37 % Böschungswinkel

%Blockgeometrie und Masse
d1=1.2 %[m]
masse = 4/3*pi*(d1/2)^3*2700 %[kg]

%Standartabweichung
std=5;
%Winkelanzahl
n=1000;                         % gewählte Winkelanzahl
r = alpha + std*randn(n,1);     % Winkelverteilung

% Geschwindigkeiten und Abprallwinkel
vfn=-7.7088
vft=16.4924

d2=-alpha-rad2deg(atan(vfn/vft));   %Ausgangswinkel für Abprall
d=-r-rad2deg(atan(vfn/vft));        % Abprallwinkelmatrix lt. Verteilung

%Netzposition
xNetz=8         % gewählte x Position vom Netzursprung
v0_1=18.205;    %Ausgangsgeschwindigkeit 1. Abprall
g=9.81;
Fraktil=95;     % gesuchtes Höhenfraktil

%Flugbahnen
yPar = zeros(n,1);
yPar=xNetz*tan(deg2rad(d))-(xNetz.^2*g)./(2*v0_1^2*(cos(deg2rad(d))).^2);

%Höhenermittlung für erforderliche Netzhöhe 90° auf Böschung
max(yPar)
yHang=-xNetz*tan(deg2rad(alpha));   % y Pos Netzursprung
h_vert=yPar-yHang;                  % h Differenz vertikal
h_nor=h_vert*cos(deg2rad(alpha));   % h Differenz normal auf Böschung
hsort=sort(h_nor);                  % h sortiert
hsort(hsort<0)=[];                  % h kleiner 0 entfernen
h1=prctile(hsort,Fraktil);          % Fraktil von h
h95=h1(1)

h95_VBB=h1(1)+d1./2         % h + halben Blockdurchmesser

%Bemessungshöhe
h95_VBB_Ed=h95_VBB*1.1      % Erhöhungsfaktor 1

%erforderliche Netzhöhe
h_Rk_erf=h95_VBB_Ed*1.1     % Abminderungsfaktor 1

%Energie kin bei Impact in Netz
v_x=((sin(deg2rad(d2))*v0_1-g*(xNetz./(v0_1*cos(deg2rad(d2))))).^2+(v0_1*cos(deg2rad(d2))).^2).^0.5;
v_x=v_x(1);
E_kin=v_x.^2/2*masse*0.001 %[kJ]

%%%%%%%%%%%   Plot    %%%%%%%%%%%%%%%%%%%%%
% Plot der verschiedenen Abprallwinkel

xn=0.25;            % x Schrittweite
x_Weite=150;        % max. betrachteter X Wert

% Böschungsgerade
x1 = 0.1:xn:x_Weite;
y1 = -x1*tan(deg2rad(alpha));

%Schutznetz im Winkel 90° auf Böschung
Netz_x=xNetz:0.1:xNetz+sin(deg2rad(alpha))*h_Rk_erf;                        % x Werte Netz
Netz_y=-xNetz*tan(deg2rad(alpha))+tan(deg2rad(90-alpha))*(Netz_x-xNetz);    % y Werte Netz
Netz_d=yHang-tan(deg2rad(90-alpha))*xNetz;                                  % y Wert bei x= 0 für kx+d Gleichung

%Netzgleichung durchgehend
Netz_y1=tan(deg2rad(90-alpha))*(x1)+Netz_d;                                 % Netzgleichung kx+d

%Netz_y1(Netz_y1>max(Netz_y))=NaN;

Netz_y1_M=ones(n,1)*Netz_y1;                                                % gleiche größe wie yPar
Netz_y1_M(Netz_y1_M>max(Netz_y))=[NaN];                                     % Beschränkung auf h max            

%z=find(yPar==NaN)

% Fluglinien
xPar=(0.1:xn:x_Weite);
yPar=xPar.*tan(deg2rad(d))-(xPar.^2.*g)./(2*v0_1^2*(cos(deg2rad(d))).^2);

% Ausgangsflugbahn
xPar_u=(0.1:2:35);
yPar_u=xPar_u.*tan(deg2rad(d2))-(xPar_u.^2.*g)./(2*v0_1^2*(cos(deg2rad(d2))).^2);

%Schnitt mit Böschung
yPar(yPar<y1)=[NaN];

%Schnitt mit Netz
yPar(yPar<Netz_y1_M)=[NaN];

%y_Test0=zeros(n,1+x_Weite);
%y_Test=yPar==y_Test0;
%y_Test1=find(yPar==0);


hx=max(Netz_x)*ones(151,1);
hy=max(Netz_y)*ones(151,1);
%yPar(:,:)=0;
%yPar(yPar<max(Netz_y))=0;
%yPar(yPar<max(Netz_x),yPar<max(Netz_y))=0;

%if xPar<hx %& yPar<hy
%    yPar=.0
%end

% Eigentliche Ploteinstellungen

figure(1)
clf
hold on
axis equal

plot(xPar,yPar)                             % Flugtrajektorien
plot(xPar_u,yPar_u,'k-o','LineWidth',1.5)   % Ausgangsflugbahn
plot(x1,y1,'k','LineWidth',2)               % Böschungslinie
plot(Netz_x,Netz_y,'k','LineWidth',3)       % erf. Netzgeometrie
plot(x1,Netz_y1,'k','LineWidth',1)          % Netzgerade durchgehend
xlim([0 70])                                % Achslimit x
ylim([-50 10])                              % Achslimit y
hold off
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


toc
 


Für weitere Unterstützung wäre ich sehr dankbar!

Beste Grüße
Max
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: 12.11.2022, 18:27     Titel:
  Antworten mit Zitat      
Hallo,

Code:
for k = 1:size(yPar, 1)
    firstNaN = find(isnan(yPar(k,:)),1);
    yPar(k, firstNaN:end) = NaN;
end


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
 
Max1
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 12.11.22
Wohnort: nähe Wien
Version: ---
     Beitrag Verfasst am: 12.11.2022, 18:31     Titel:
  Antworten mit Zitat      
Vielen herzlichen Dank, genau so hab ich es gesucht!

Beste Grüße
Max
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.