使用Matlab有效地为我的猫模拟激光指示器

7 matlab motion game-physics

我正在尝试使用matlab编写代码,该代码模仿激光指针,我的猫会喜欢在屏幕上追逐它.这是我到目前为止所做的:

figure('menubar','none','color','k')
h = plot(0,'r.','MarkerSize',20);
xlim([-1 1]);  ylim([-1 1])
axis off
phi1=(1+sqrt(5))/2;
phi2=sqrt(3);
step= 0.0001; % change according to machine speed
for t=0:step:100
    set(h,'xdata',sin(t+phi1*t),'ydata',cos(phi2*t))
    drawnow
end
Run Code Online (Sandbox Code Playgroud)

此代码的"问题"如下:

  1. 指针或多或少地以恒定速度移动,并且不会减慢到接近停止然后意外地继续.

  2. 虽然我试图用不合理的数字来制作它,但是整个动作从右到左是连续的.我认为更清晰的轨迹改变会有所帮助.

我知道这不是传统的编程问题,但我仍然想解决一个编程问题.我很感激你的帮助,当然还有新的方式回答我的问题,不使用我添加的代码.

en5*_*1nm 3

这个问题问得非常好,我想我应该花 15 分钟的时间来亲自尝试一下。经过 YouTube 对激光技术的广泛研究后,我认为使用运动方程在随机点之间移动会很好:

n = 20; %number of steps
pos = [0,0]; % initial position
vel = 4; % laser velocity
acc = 400; % laser acelertation
dt = 0.01; % timestep interval
figure
set(gcf,'Position',get(0,'Screensize'));
for i=1:n
    point = rand(1,2);
    dist = 1;
    while dist > 0.05 % loop until we reach the point
        plot(pos(1),pos(2),'o','color','r','MarkerFaceColor','r')
        axis equal
        xlim([0,1])
        ylim([0,1])
        drawnow
        % create random point to move towards
        dist = pdist([point;pos],'euclidean');
        % calculate the direction & mag vector to the point
        dir = (point-pos)/norm((point-pos));
        mag = norm(point-pos);
        % update position
        displ = vel*dt - 0.5*acc*mag*dt^2;
        pos = pos + dir*displ;
    end
end
Run Code Online (Sandbox Code Playgroud)

尝试调整参数,直到找到你的猫喜欢的东西:0)