Generate an equation of a 3D line from one point and two angles
3 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Hi,
I have been other thinking this and think I am missing a very simple solution.
The problem: I have a 3D space in which x-y [0 3000] and z[0 600]. I want to generate random "lines" specified by points. For this, I generate seed points, within the xyz plane between the given limits. I also generate Phi [0 pi] and Theta[0 2*pi] such that I have a random initial start and random angular information. Using this information alone, is it possible to generate a set of points within the xyz space limits based upon random Theta and Phi?
I've attached some prelim code that may help.
SizeSimulated_xy= 3000;
SizeSimulated_z=600;
Boundries_xy=[0 SizeSimulated_xy];
Boundries_z=[0 SizeSimulated_z];
xmin=Boundries_xy(1);
xmax=Boundries_xy(2);
xmin_z=Boundries_z(1);
xmax_z=Boundries_z(2);
Phi=rand(1,1)*pi;
Theta=rand(1,1)*2*pi;
xyRand = xmin+rand(1,2)*(xmax-xmin);
zRand=xmin_z+(xmax_z-xmin_z)*rand(1,1);
r=sqrt(xyRand(1,1).^2+xyRand(1,2).^2+zRand.^2);
x_dir=r*cos(Phi)*sin(Theta);
y_dir=r*cos(Phi)*cos(Theta);
z_dir=r*sin(Phi);
direction=[x_dir;y_dir;z_dir];
a=direction(1,1);
b=direction(2,1);
c=direction(3,1);
x0=xyRand(1,1);
y0=xyRand(1,2);
z0=zRand;
Although here is my problem:
z=z0+(c/a)*(x-x0);
x=z0+(a/c)*(z-z0);
y=y0+(b/c)*(z-z0);
Thanks!
0 Kommentare
Antworten (1)
KSSV
am 21 Sep. 2017
P0 = [0 3000] ;
Z0 = 0 ; Z1 = 600 ;
P0 = [P0 Z0] ;
%%Top plane
x = linspace(-100,100,10) ;
y = linspace(-3000,3000,10) ;
[X,Y] = meshgrid(x,y) ;
Z = Z1*ones(size(X)) ;
figure
hold on
plot3(P0(1),P0(2),P0(3),'*r')
plot3(X,Y,Z,'.r')
for i = 1:size(X,1)
for j = 1:size(X,2)
plot3([P0(1) X(i,j)],[P0(2) Y(i,j)],[P0(3) Z(i,j)],'b')
drawnow
end
end
view(3)
0 Kommentare
Siehe auch
Kategorien
Mehr zu Annotations finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!