MATLAB: How to define a clockwise or counterclockwise angular vector based on a direction at the initial angular position

rotationvector

Let's say I have a circle at (0,0) with radius = 1; I want the computer to generate a equally spaced vector from 0 degree to 90 degree based on a direction specified at 0 degree. For example, if the direction is [0,1], it will be a counterclockwise rotation such as [0,10,20,30…80,90]; if the direction is [0,-1], it will be a clockwise rotation such as [0,350,340,330…100,90].
The direction, initial and final angular positions are all inputs, and I want the computer to self determine which way the rotation will occur.
I am new to Matlab, thanks a lot for the help!

Best Answer

  • Yizhou - this almost seems like a homework question so we can only give out hints. Let's assume then that you have three inputs
    initialAngle % degrees i.e. 0
    finalAngle % degrees i.e. 90
    direction % +1 or -1
    angleStepSize % degrees i.e. 10
    (I know that you have said that a positive direction is a counter-clockwise rotation but to me that seems off. A counter-clockwise rotation around the axes starting at zero degrees seems (to me) that we would go negative: 0, 350, 340, etc. if our step size is ten degrees.)
    We can easily create an array of angles from 0 to 90 with a step size of ten as
    initialAngle = 0;
    finalAngle = 90;
    angleStepSize = 10;
    direction = 1;
    angles = initialAngle:direction*angleStepSize:direction*finalAngle
    which gives us
    angles =
    0 10 20 30 40 50 60 70 80 90
    If we switch the direction to be negative one, then we would get
    angles =
    0 -10 -20 -30 -40 -50 -60 -70 -80 -90
    which isn't what you want but you can see how we create an array in the "other" direction. We could then use mod to get something a little closer to what you want
    direction = -1
    angles = mod(initialAngle:direction*angleStepSize:direction*finalAngle, 360)
    where
    angles =
    0 350 340 330 320 310 300 290 280 270
    The next step (which will be left to you) is how to figure out the final angle so that we (in this case) get an array like 0, 350, 340, ..., 90
  • Related Question