0
votes

See this picture. In this the cuboid has to rotate along the other axes that were marked in the picture but it stays in the same axis x,y,zThe image attached gives the code of the cuboid.

##defining to plot the cuboid
def plot_cuboid(center, size):
    """
   Create a data array for cuboid plotting.
   ============= ================================================
   Argument      Description
   ============= ================================================
   center        center of the cuboid, triple
   size          size of the cuboid, triple, (x_length,y_width,z_height)
   :type size: tuple, numpy.array, list
   :param size: size of the cuboid, triple, (x_length,y_width,z_height)
   :type center: tuple, numpy.array, list
   :param center: center of the cuboid, triple, (x,y,z)
   """

    # suppose axis direction: x: to left; y: to inside; z: to upper
    # get the (left, outside, bottom) point
    ox, oy, oz = center
    l, w, h = size

    ##defining the points
    x = np.linspace(ox-l/2,ox+l/2,num=10)
    y = np.linspace(oy-w/2,oy+w/2,num=10)
    z = np.linspace(oz-h/2,oz+h/2,num=10)

    ## defining surfaces and extrude them
    x1, z1 = np.meshgrid(x, z)
    y11 = np.ones_like(x1)*(oy-w/2)
    y12 = np.ones_like(x1)*(oy+w/2)
    x2, y2 = np.meshgrid(x, y)
    z21 = np.ones_like(x2)*(oz-h/2)
    z22 = np.ones_like(x2)*(oz+h/2)
    y3, z3 = np.meshgrid(y, z)
    x31 = np.ones_like(y3)*(ox-l/2)
    x32 = np.ones_like(y3)*(ox+l/2)

    ax = fig.gca(projection='3d') ##plot the project cuboid

    #plot outside surface
    ax.plot_surface(x1, y11, z1, color='red', rstride=1, cstride=1, alpha=0.6)
    #plot inside surface
    ax.plot_surface(x1, y12, z1, color='white', rstride=1, cstride=1, alpha=0.6)
    #plot bottom surface
    ax.plot_surface(x2, y2, z21, color='blue', rstride=1, cstride=1, alpha=0.6)
    #plot upper surface
    ax.plot_surface(x2, y2, z22, color='black', rstride=1, cstride=1, alpha=0.6)
    #plot left surface
    ax.plot_surface(x31, y3, z3, color='green', rstride=1, cstride=1, alpha=0.6)
    #plot right surface
    ax.plot_surface(x32, y3, z3, color='pink', rstride=1, cstride=1, alpha=0.6)

    ## Add title 
    plt.title('Plot_for_PSM', fontsize=20)

    ##labelling the axes
    ax.set_xlabel('X')
    ax.set_ylabel('Y')
    ax.set_zlabel('Z')

`

My question is that can we rotate the cuboid that was defined below with the euler angles in python?

center =(2.1,-0.1,0.757761) length=0.3, width=0.4, height=0.1 all in metres. as per the code in the attached image. Euler angles are 0,0,120 for example along x,y,z directions.

I have made some program to rotate a cuboid with the euler angles. But after attaining the euler angles how can I rotate the cuboid is my question. Can anyone suggest or attain the code for this problem?

Actually, I have quaternions which are converted into Euler angles and then want to rotate according to these Euler angles along their axes with right hand rule. You can view my code up to where I have done and also can suggest if anything wrong I have done.

In the code 'y' represents the angle with x-axis, 'p' represents the angle with y-axis, 'r' represents the angle with z-axis. the expected result is that the cuboid has to rotate along these euler angles(y,p,r) with respect to x,y,z axis.

Thanks in advance!

1
if you have the Quarterions then you can apply the rotaions using scipy.spatial.transform.Rotation. this method also allows you to use Euler angles or cosine matices.DrBwts
Thank you for your suggestion. If you write a simple code and explain with cuboid that will be a great helpful. Thank you in advancePradeep Chakravarthi Nutakki
there is plenty of example code in the documentationDrBwts
I made the program for rotation but only the axes is rotating but not the cuboid. Can you suggest a code to rotate the cuboid along with the axis.Pradeep Chakravarthi Nutakki
edit your original post to include your new code & I'll have a lookDrBwts

1 Answers

0
votes

First calculate the position vectors (the xyz coordinates) of the corners then use scipy.spatial.transform.Rotation on each corner.