Calculation/ Visualisation of circular planes in a 3D space
7 次查看(过去 30 天)
显示 更早的评论
Hey @ all,
I have following problem: For a large number of points with x,y,z coordinates I want to calculate or at least visualize circles. The center of each circle is the respective point at x,y,z.
x: 1 y: 1 z: 1
The diameter of the circle is fixed to 0.25 m. Up to this point, all is fine. Now i want to orient the circular plane in the space based on the specific position vector of the point.
x_pvector: 0.008 y_pvector: -0.09 z_pvector: -0.339
The circular plane should be orthogonal to this vector. I found a way to calculate 3 points on the border of this plane and fit at circle afterwards - but this is really time-consuming and laborious.
Is there any elegant solution, that I might have overlooked? Thanks a lot for any comments! :)
R.
0 个评论
采纳的回答
Teja Muppirala
2012-3-29
Here are two possible ideas. Given a circle center and a normal vector:
R = 0.25; %Radius
xyz = randn(1,3); %Circle center
normalVec = randn(1,3); %Normal vector
Method 1: Use the ROTATE command
figure;
th = linspace(0,2*pi,100);
circ = bsxfun(@plus,xyz',R*[cos(th); sin(th); 0*th]);
h = plot3(circ(1,:),circ(2,:),circ(3,:));
RotationAxis = cross([0 0 1],normalVec);
if any(RotationAxis);
RotationAngle = 180/pi*acos([0 0 1]*normalVec'/norm(normalVec));
rotate(h,RotationAxis,RotationAngle,xyz);
end;
hold on;
quiver3(xyz(1),xyz(2),xyz(3), normalVec(1),normalVec(2),normalVec(3),'r');
axis equal;
Method 2: Do it manually using the nullspace of the normal vector
th = linspace(0,2*pi,100);
P = null(normalVec);
circ = bsxfun(@plus,xyz',R*P*[cos(th); sin(th)]);
figure;
hold on;
plot3(circ(1,:),circ(2,:),circ(3,:));
quiver3(xyz(1),xyz(2),xyz(3), normalVec(1),normalVec(2),normalVec(3),'r');
axis equal;
Both methods will give you identical results.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Annotations 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!