나는 3D 점 구름을 그려보고 있지만, 그림을 특정 포즈로 회전시키는 데 어려움을 겪고 있습니다. 예를 들어벡터를 보면서 figure 시점을 3d 위치로 이동하는 방법은 무엇입니까?
,
figure; hold on;
z = linspace(0,3*pi,250);
x = 2*cos(z) + rand(1,250);
y = 2*sin(z) + rand(1,250);
plot3(x, y, z, 'b.', 'MarkerSize', 20);
plot3(x(1), y(1), z(1), 'kx', 'MarkerSize', 20);
plot3([x(1) x(end)], [y(1) y(end)], [z(1) z(end)], '-k');
기본 관점은 내가 'X'위치에서 검은 선을 따라보고 싶지
입니다. 나는 수동으로 GUI 컨트롤이 그림을 회전 할 수 있고, 나는 그러나
view(96, -46);
를 사용
내가이 위치에 뷰를 회전 할 수 있습니다 고도 -46 방위각 (96)에 가장 가까운을 얻을 것을 발견 시점은 실제로 'X'의 꼭대기에 위치하지 않습니다. 'X'는 시점 앞 거리다. 또한이 코드를 호출 할 때마다 다른 벡터가 있으므로 매번 동일한 방위각 및 고도를 사용할 수 없습니다.
벡터에서 방위각과 고도를 계산할 수 있어야합니다. 내 시도,
x_dif = x(end)- x(1);
y_dif = y(end)-y(1);
z_dif = z(end)-z(1);
azimuth = (atan(x_dif/y_dif))*180/pi;
elevation = (atan(z_dif/sqrt(x_dif^2+y_dif^2)))*180/pi;
view(azimuth, elevation);
이 잘못된 솔루션을 생성합니다. 난 방위각과 고도가 줄거리 상자의 중심에 상대적이어야하기 때문일 수도 있다고 생각합니다. (view
documentation). 어떻게해야할지 모르겠습니다.
벡터를 사용하여 그림을 계산하고 회전을 적용하려면 어떻게해야합니까?
추측 전 문서에서이 부분을 간과했습니다. 좋은 발견! – Cecilia
걱정하지 마라. 문서에 묻어있다. 필자는 atan() * 180/pi()보다는 atand()를 사용해야하지만, 여러분의'[alt, az]'코드가'axis equal'과 함께 동작했을 수도 있다고 생각합니다. –