Hallo zusammen,
ich soll für eine Projektarbeit u.a. den Arbeitsraum eines Roboters als Punktewolke plotten. Nun sind aber nur die Grenzpunkte der Wolke - Mantelfläche gefragt, sozusagen die Grenze des Arbeitsraumes.
convhull liefert schon mal die äußere Mantelfläche, doch dort wo die Wolke nach innen eingedrückt ist (wo der Roboter sonst mit sich selbst kollidieren würde) erkennt convhull die Mantelfläche nicht.
1. Gibts da eine ergänzende Funktion?
2. Kann man die Punkte, die convhull erkannt hat auch exta ausgeben lassen? (Habe versucht mit
plot3(K(:,1),K(:,2),K(:,3),'b.')
das K auszugeben aber das ergibt keinen kugelförmigen Arbeitsraum vllt müssen die Punkte noch irgendwie transformiert werden ka...)
Das Programm:
clc; close all; clear all;
r53_K3=[0;0;1000];
r32_K2=[0;0;1150];
r21_K1=[350;0;675];
hold on
index=1;
for A1=-185:45:185
for A2=0:-25:-135
for A3=-120:45:155
C_KK1=[ cosd(A1) sind(A1) 0 ;
-sind(A1) cosd(A1) 0 ;
0 0 1];
C_K1K2=[cosd(85+A2) 0 cosd(5-A2);
0 1 0 ;
cosd(175+A2) 0 cosd(85+A2)];
C_K2K3=[cosd(A3) 0 sind(A3);
0 1 0 ;
-sind(A3) 0 cosd(A3)];
%Ortsvektor des Arbeitsbereiches in K- bzw. World-Koordinaten
r_AB = C_KK1*r21_K1 + C_KK1*C_K1K2*r32_K2 + C_KK1*C_K1K2*C_K2K3*r53_K3;
%Arbeitsraum als Punktewolke
plot3(r_AB(1),r_AB(2),r_AB(3),'b.')
%x, y und z-Komponenten der Punkte in der Wolke als Spaltenvektoren
x(index,1)=r_AB(1);
y(index,1)=r_AB(2);
z(index,1)=r_AB(3);
index=index+1;
end
end
end
logicalvar = true[K,V] = convhull(x,y,z,'simplify', logicalvar)
trisurf(K,x,y,z,'facealph ...
↧