Using a non-linear value for pause

1 次查看(过去 30 天)
Abdallah
Abdallah 2014-4-8
回答: Abdallah 2014-4-8
I am trying to set a certain object to rotate, but the rotation is meant to be decaying with time. So I assume I will need an exponential function, that I can use in the pause command to do this. However I seem to still get linear rotation, even though my pause function is set to be exponential. Here is my code:
%%%%%I just posted the related part of the code
for trib=1:1:length(ang); %%%ang was used before
for ang=-0.1366*pi:.02:1.1366*pi;
xx=log(4-ang/4).*-10.96;
%%%%figure setting
%%%%plotting command
pause(xx);
end
end

回答(3 个)

Walter Roberson
Walter Roberson 2014-4-8
Your x values are all negative. ang would have to be at least 3.819718633 * pi in order for (4-ang/4) to be as low as 1 and thus generate a negative log() to multiply by the negative 10.96 in order to generate a positive pause time.
  1 个评论
Abdallah
Abdallah 2014-4-8
I noticed i wrote it in the wrong way actually. It is supposed to be:
xx=log((4-ang)/4).*-10.96
but that still doesn't give me an exponential pause. I am trying to do a rotation similar to a step response, where time changes rapidly at first and gets slower later. That doesn't seem to work here for some reason.

请先登录,再进行评论。


Joseph Cheng
Joseph Cheng 2014-4-8
Try exaggerating the the non-linearity and see if you see a bigger difference.
you can see how things are performing if you insert some debugging code
for ang=-0.1366*pi:.02:1.1366*pi;
tic,
xx=log((4-ang)/4).*-10.96;
pause(xx)
disp([toc xx]);
end
the displayed toc should be close to your xx value.
  2 个评论
Joseph Cheng
Joseph Cheng 2014-4-8
wouldn't it also be more practical to add a term to the angular rotation equation to vary the angular rotation over time rather than keeping the angular rotation constant but stretching time?
Abdallah
Abdallah 2014-4-8
I have the first order equeation of 10.96dv/dt+v=4 .. assuming v is ang (the angle)
4 is the steady-state angle in radians
I am trying to get an equation for time.
the ODE can be converted into this form: v=4-4*exp(-t/10.96)
then I did a rearranging and I got t in this from t=ln((4-V)/4).*-10.96
in other words t=ln((4-ang)/4).*-10.96
but since it is inside in a for loop I imagine the ang should change therefore t is changing as well. Is there another way I can manage to get time in a more tidy and probably accurate way?

请先登录,再进行评论。


Abdallah
Abdallah 2014-4-8
Ok now I am very certain of my mathematical model, but I am not sure how to deal with the loops.
My equation is in the form of:
for k=1:1:length(ang); %%ang previously defined as -0.1*pi:0.0174:1.103*pi;
for ang=-0.1*pi:0.0174:1.103*pi;
ggg=log((3.33-ang))/3.759);
t=ggg/-0.09;
figure(1); clf reset
plot whatever
pause(t);
end
end
My new equation for t has no chance of giving a negative value because I made sure angles are within boundary. However this time no rotation at all is happening. Can I please get help on this one.

类别

Help CenterFile Exchange 中查找有关 Mathematics 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by