- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在 3d 空间 (x,y,z) 中有一个点。我想离散地从该点径向向外移动(比如 r=1 和 r=2)。在 x,y 平面上,我可以简单地通过步进 ((x+r cos(theta)), (y+r sin(theta)), z) 向外移动,其中 r = 1 或 2,theta 每次变化,比如说 10 度.
但是,如果我想让线条在倾斜平面上向外移动并在该平面内步进我的线条,我不确定如何描述这种运动。
我认为它只是使用球坐标。但是,如果我使用 (x=rho sin phi cos theta, y=..., z=...) 从中心点画线,会不会形成一个圆锥体而不是一个在平面上倾斜的圆?
附言将在 MATLAB 中实现这一点
最佳答案
您可以先使坐标从 P0 向外移动,然后使用 rotation matrix 旋转坐标。 .
因此,正如 MBo 指出的那样,您对所有 R 和 theta 取点 P:
P = [ P0x + R * cos(theta); P0y + R * sin(θ); 0]
然后你制作一个旋转矩阵,以你想要的角度旋转 XY 平面
如果将其与坐标相乘,您将得到旋转后的坐标。例如,点 [1,0,0] 绕 Z 轴旋转 90 度:
但是您可能想围绕点 P0 旋转而不是围绕原点旋转,那么您必须使用以下平移制作仿射矩阵:
tx = x- r00 * x - r01 * y - r02 * z
ty = y- r10 * x - r11 * y - r12 * z
tz = z- r20 * x - r21 * y - r22 * z
然后用T和R做一个仿射变换矩阵(图中记为M,sorry):
在此图中,Q 是旧坐标,Q' 是新坐标。
我遇到了类似的问题并使用了 this回答并根据您的问题进行调整:
%input point and rotated plane
p0 = [10;10;10;1]; % the last entry is your homogeneous dimension
r0 = [45,45,45]; r0 = r0*pi/180;
%rotation to plane
Rx=[1 0 0 0;
0 cos(r0(1)) sin(r0(1)) 0;
0 -sin(r0(1)) cos(r0(1)) 0;
0 0 0 1];
Ry=[cos(r0(2)) 0 -sin(r0(2)) 0;
0 1 0 0;
sin(r0(2)) 0 cos(r0(2)) 0;
0 0 0 1];
Rz=[cos(r0(3)) sin(r0(3)) 0 0;
-sin(r0(3)) cos(r0(3)) 0 0;
0 0 1 0;
0 0 0 1];
R = Rz*Ry*Rx; A = R;
T = ( eye(3)-R(1:3,1:3) ) * p0(1:3); %calculate translation to rotate about the point P0
A(1:3,4) = T; % to rotate about the origin just leave out this line
%make coordinates for the points going outward from p0
nangles = 36; anglestep = 2*pi/nangles;
nradii = 2; radiistep = 1;
thetas = anglestep:anglestep:2*pi;
rs = radiistep:radiistep:nradii*radiistep;
npoints = nradii*nangles;
coordinates = zeros(4,npoints); curpoint = 0;
for itheta = 1:nangles; for iradius = 1:nradii;
curpoint = curpoint+1;
coordinates(:, curpoint) = p0+rs(iradius)*[cos(thetas(itheta));sin(thetas(itheta));0;0];
end; end
coordinates_tilted = A*coordinates; %rotate the coordinates to the new plane
结果是这张图:
figure;
scatter3(coordinates_tilted(1,:),coordinates_tilted(2,:),coordinates_tilted(3,:), 'MarkerEdgeColor', 'green')
hold on
scatter3(coordinates(1,:),coordinates(2,:),coordinates(3,:), 'MarkerEdgeColor', 'red')
legend('tilted', 'original')
或者将它们绘制成线条:
%or as lines
coorarray = reshape(coordinates, [4 nradii nangles]);
Xline = squeeze(coorarray(1,:,:));
Yline = squeeze(coorarray(2,:,:));
Zline = squeeze(coorarray(3,:,:));
coorarray_tilted = reshape(coordinates_tilted, [4 nradii nangles]);
Xline_tilted = squeeze(coorarray_tilted(1,:,:));
Yline_tilted = squeeze(coorarray_tilted(2,:,:));
Zline_tilted = squeeze(coorarray_tilted(3,:,:));
figure;
plot3(Xline,Yline,Zline, 'r');
hold on
plot3(Xline_tilted,Yline_tilted,Zline_tilted, 'g');
legend( 'original', 'tilted')
这是否回答了您的问题?现在,这些点位于所有 36 度角的倍数处,距离平面中的点 P0 的距离为 1 和 2,该平面在围绕点 P0 的所有轴上倾斜 45 度。如果您需要单独的“像素”来指定您的线(因此是整数坐标),您可以将坐标四舍五入,这将是一种最近邻方法:
coordinates_tilted_nearest = round(coordinates_tilted);
关于matlab - 如何描述从中心点径向向外移动的线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28107693/
我正在尝试快速创建一个径向 CAGradientLayer。普通 CAGradientLayers(默认类型 axial)没有问题。它们在模拟器中的快照和运行时呈现良好。 当我拍摄我创建的 UIVie
我想用 CSS 制作一个径向进度指示器,它的中间圆圈是透明的。看这里:http://codepen.io/geedmo/pen/InFfd – 这是我想要做的事情的完美示例,但中间 (.overlay
我已经编写了用于生成网络图的 UI、服务器和 global.r。它适用于一种布局(layout.fruchterman.reingold)。我想要一个用于列出布局的单选按钮(径向、对角线网络和 den
我正在使用 jqwidgets。在那些小部件中,我使用的是径向量规。对于那个径向仪表,我想给出径向背景色。我有一个类似这样的代码,用于更改径向仪表中的背景颜色。 $('#gauge').jqxGaug
有谁知道我可以用来为 iOS 应用程序创建饼图(径向)菜单的库(开源或其他)? 看来现在应该有人想到了这一点,如果没有必要,我不愿意自己动手。 最佳答案 我不久前发现的一个。 http://www
我正在使用 this code为我的数据获取径向 TreeMap 。但是,我想修改它以避免弯曲链接。相反,我对线性直接连接感兴趣。弯曲的链接使插图不那么复杂,特别是当我们的子节点数量较少时。例如,您可
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this qu
我正在使用 chrome 18.0.1025.162 并尝试进行径向渐变 -webkit-radial-gradient(circle, rgba(100, 100, 100, 0.2), rgba(
我想呈现漂亮的径向树布局,但有点被弯曲的边缘绊倒了。问题是源点和目标点之间的角度不同,边缘的绘制方式也不同。提供的图片来自单个图表,因此您可以看到它们在不同边缘方向上有何不同。我认为关键在于 beiz
我希望我的工具栏使用 Material 设计径向 react 编排指南改变颜色 我想将其实现为 Angular 2 过渡,但我不知 Prop 体该怎么做: 看起来像这样.. @Component({
我目前正在使用以下代码绘制形状; GLfloat vertex = // vertex points glLineWidth(2); glEnableClientState(GL_VERTEX_ARR
我是一名优秀的程序员,十分优秀!