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

我试图用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

这个代码的“问题”如下:

  • 指针以不变的速度或多或少地移动,并且不会减速到近乎停止,然后意外地继续。

  • 轨迹有些重复,尽管我试图用无理数来表示它,整体运动从右到左是连续的。 我认为更为激烈的轨迹变化将有所帮助。

  • 我知道这不是一个传统的编程问题,但我仍然想解决一个编程问题。 我会很感激您的帮助,当然也可以通过新的方式来回答我的问题,即不使用我添加的代码。


    辉煌的问题,这么好,我认为我会花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
    

    玩弄参数,直到你找到你喜欢的东西:0)

    链接地址: http://www.djcxy.com/p/14747.html

    上一篇: effectively emulating a laser pointer for my cat using Matlab

    下一篇: Is it "javax" illegal(reserved) package name or not?