Solved

# Matrix Concatenation and Glide

Posted on 2000-02-15
368 Views
Last Modified: 2008-02-01
Hey, I have writen a small 3d engine.
However, I need to rotate a object, as well as keep the object in place and expand it.  I have read in the MSDN that the corret way to do this is to multiply the two matrixs. I did this, using the code on question:http://www.experts-exchange.com/jsp/qShow.jsp?ta=cprog&qid=10294246
However, this does not work. The matrixs are:
matrix Org={10,0,0,10,
0,10,0,10,
0,0,10,10,
0,0,0,0};

matrix roat={1,1,1,1,
1,cosf(movex),sinf(movex),1,
1,(-sinf(movex)),cosf(movex),1,
1,1,1,1};
could someone show me the correct matrix? Or if this is correct, can someone show me a multiplied matrix that works, so I can debug? Thanks

0
Question by:laeuchli
[X]
###### Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points
• Learn & ask questions
• 4
• 2
6 Comments

LVL 1

Expert Comment

ID: 2526934
For 3D rotation, you have to multiply 3 matrix to the coordinates

The first one is shift to orgin

matrix MoveToOrg={1,0,0,0,
0,1,0,0,
0,0,1,0,
-x,-y,-z,1};

For rotation, to represent according to z -axis

matrix
RotatoZ={conf(anglez),sinf(anglez),0,0,
sinf(anglez),conf(anglez),0,0,
0,0,1,0,
0,0,0,1};

along x-axis
RotateX={1,0,0,0,
0,conf(anglex),sinf(anglex),0,
0,-sinf(anglex),cosf(anglex),0,
0,0,0,1};

along y-axis
RotateY={cosf(angley),0,-sinf(angley),0,
0,1,0,0,
sinf(angley),0,cosf(angley),0,
0,0,0,1};

And then shift back from orgin

matrix MoveBack={1,0,0,0,
0,1,0,0,
0,0,1,0,
x,y,z,1};

You have to multiply all of them in order to produce a new matrix for 3D object rotation

0

LVL 5

Author Comment

ID: 2527019
All I really wanted to do, was roate on the X axis, and keep every thing the right size. I don't at the time want to rotate on the Y and Z axis. Do I still have to multily all the matrixs?
0

LVL 5

Author Comment

ID: 2529552
Could you show me a finished example matrix for a roation about the x axis?I seem to have bug in my program.

0

LVL 1

Accepted Solution

sthung earned 70 total points
ID: 2530060
For example if you want to rotate along x-axia for 30 degree

First of all you have to change the unit from degree to radian
Let's assume the rotation center is at origin

#include <math.h>

struct Point
(
float x,y,z;
};

main()
{
struct Point p;
struct Point np;
p.x=1;
p.y=1;
p.z=1;

float d=30;
float r=(float)d*PI/180.0;

float MatRotat[4][4];

for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
MatRotat[i][j]=0;

// 1,   0   ,  0   ,0
// 0, cos(r),sin(r),0
// 0,-sin(r),cos(r),0
// 0,   0   ,  0   ,1

MatRotat[0][0]=1;
MatRotat[1][1]=cos(r);
MatRotat[1][2]=sin(r);
MatRotat[2][1]=-sin(r);
MatRotat[2][2]=cos(r);
MatRotat[3][3]=1;

np.x=p.x*MatRotat[0][0]+p.y*MatRotat[0][1]+p.z*MatRotat[0][2]+MatRotat[0][3];
np.y=p.x*MatRotat[1][0]+p.y*MatRotat[1][1]+p.z*MatRotat[1][2]+MatRotat[1][3];
np.z=p.x*MatRotat[2][0]+p.y*MatRotat[2][1]+p.z*MatRotat[2][2]+MatRotat[2][3];

// np is holding new point after rotate
printf("After rotate 30 along x-axis and rotation center is origin\n");
printf("Original point (%.2f,%.2f,%.2f)\n",p.x,p.y,p.z);
printf("New point (%.2f,%.2f,%.2f)\n",np.x,np.y,np.z);

}
0

LVL 5

Author Comment

ID: 2530965
ok, thanks I will get back to you, after I test it.

0

LVL 5

Author Comment

ID: 2540966
Thanks, that did the trick
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

An Outlet in Cocoa is a persistent reference to a GUI control; it connects a property (a variable) to a control.  For example, it is common to create an Outlet for the text field GUI control and change the text that appears in this field via that Ou…
Summary: This tutorial covers some basics of pointer, pointer arithmetic and function pointer. What is a pointer: A pointer is a variable which holds an address. This address might be address of another variable/address of devices/address of fu…
The goal of this video is to provide viewers with basic examples to understand and use for-loops in the C programming language.
The goal of this video is to provide viewers with basic examples to understand and use conditional statements in the C programming language.
###### Suggested Courses
Course of the Month2 days, 22 hours left to enroll

#### 695 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.