|
% eye = [...]; |
|
target = [0 0 0]; |
|
up = [0 0 1]; |
|
|
|
% |
|
% generate some dummy data |
|
% |
|
|
|
figure(1); |
|
clf; |
|
subplot(1, 2, 1); |
|
scatter3(0,0,0,'x'); |
|
hold on; |
|
n_pts = 100; |
|
points = zeros(3, n_pts); |
|
for i = 1:n_pts |
|
points(:, i) = [cos(i/n_pts*2*pi), .25 * rand(), sin(i/n_pts*2*pi)]; |
|
scatter3(points(1, i), points(2, i), points(3, i)); |
|
end |
|
xlabel('X'); |
|
ylabel('Y'); |
|
zlabel('Z'); |
|
daspect([1 1 1]); |
|
xlim([-4, 4]); |
|
ylim([-4, 4]); |
|
|
|
|
|
|
|
% |
|
% animate the camera |
|
% |
|
|
|
n_camera_pos = 32; |
|
|
|
filename1 = 'camera_anim.gif'; |
|
clear imind |
|
|
|
for i = 1:n_camera_pos |
|
|
|
eye = [4 * sin((i-1)/n_camera_pos*2*pi), 3 * cos((i-1)/n_camera_pos*2*pi), 1]; |
|
|
|
subplot(1, 2, 1); |
|
scatter3(eye(1), eye(2), eye(3), '+'); |
|
hold on |
|
|
|
camera_matrix = lookAt(eye, target, up); |
|
camera_matrix = camera_matrix(:,1:3); |
|
|
|
subplot(1, 2, 2); |
|
cla |
|
|
|
for j = 1:n_pts |
|
p = camera_matrix' * [points(1, j) points(2, j) points(3, j) 1]'; |
|
|
|
hold on |
|
scatter(p(1) / p(3), p(2) / p(3)); |
|
end |
|
|
|
daspect([1 1 1]); |
|
xlim([-1 1]) |
|
ylim([-1 1]) |
|
drawnow |
|
|
|
frame = getframe(1); |
|
im = frame2im(frame); |
|
[im, cm] = rgb2ind(im, 256); |
|
if i == 1 |
|
imwrite(im, cm, filename, 'gif', 'writemode', 'overwrite', 'LoopCount', inf, 'DelayTime', .1); |
|
else |
|
imwrite(im, cm, filename, 'gif', 'writemode','append', 'DelayTime', .1); |
|
end |
|
|
|
% pause(.1); |
|
end |