# Polygon Position

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 03/03/2010 at 18:21, xxxxxxxx wrote:

Do I need the world coordinates of the points I am using for this to work properly?

~Shawn

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 09/03/2010 at 17:20, xxxxxxxx wrote:

I feel like I have done the rotation matrix correctly here.  But my object is not rotating to the normal of the polygon.  Does anyone see anything that I am doing wrong creating the rotation matrix?

I would GREATLY, appreciate any help anyone could offer.  This one is irritating me because everything I have read about rotation matrices says that I am doing it right.  I am using a vector that represents the center of the polygon (polygonLocation)   I am using another point in the polygon to determine the plane upon which the polygon rests.  I am then using the cross product of those vectors to determine the up vector that is perpendicular to the plane.  So, if my understanding of rotation matrices is correct, this should create a rotation matrix that can then be adapted by an object and that object should rotate to the normal of the polygon.

However, that is not happening with what I have pasted above.   I am at a loss.  Does anyone see anything that I am doing wrong?

Thanks so much for anyone who has the time to help me out.

~Shawn

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 15/03/2010 at 01:25, xxxxxxxx wrote:

Originally posted by xxxxxxxx

I am using a vector that represents the center of the polygon (polygonLocation)   I am using another point in the polygon to determine the plane upon which the polygon rests.  I am then using the cross product of those vectors to determine the up vector that is perpendicular to the plane.

This part is wrong.

Assume that A is the midpoint of your polygon and B is one of the polygon points.
N is the polygon normal.

You have to build the cross product of (B-A) and N for one of the matrix axes, let's say for V1.
Then build the cross product of this new axis and the normal for the second matrix axis, V2.
The normal is the third axis of the matrix, V3.
The polygon midpoint is the matrix offset, V0 or off.

cheers,
Matthias

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 15/03/2010 at 02:41, xxxxxxxx wrote:

Thanks Matthias,

I must not fully understand how to get the normal then.   I thought that the normal was A - B.   How to I get the value for N then?

THanks,

~Shawn

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 15/03/2010 at 02:47, xxxxxxxx wrote:

Would I use

#### CalcFaceNormal()_<_h4_>_

~Shawn

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 15/03/2010 at 02:49, xxxxxxxx wrote:

For triangles the normal is the cross product of two edges of the triangle. For quadrangles it's not exactly defined. The easiest way which gives a good result is too use the cross product of the diagonales.

cheers,
Matthias

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 15/03/2010 at 03:06, xxxxxxxx wrote:

So to calculate the normal of a quad would I do something like this...  Assuming that the points in a quad are A, B, C, and D

N = (A-C)%(D-B)

TRIANGLE

N = (A-C)%(B-C)

SOmething like that?

Does CalcFaceNormal() do this for you?  or is that something completely different?

Thanks  a lot for your help,

~ Shawn

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 15/03/2010 at 03:23, xxxxxxxx wrote:

yes and yes

source code of CalcFaceNormal()

``````
inline Vector CalcFaceNormal(const Vector *padr, const CPolygon &v)
{
if (v.c==v.d)
else
}
``````

cheers,
Matthias

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 15/03/2010 at 12:00, xxxxxxxx wrote:

does CalcFaceNormal work for you?? when i use it i get only nonsense rotations.

cheers,
ello

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 15/03/2010 at 12:32, xxxxxxxx wrote:

What are you trying to do?

~Shawn

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 15/03/2010 at 12:41, xxxxxxxx wrote:

i am just trying to rotate some clones according to a surface normal.  and using CalcFaceNormal results in this:
http://tempfiles.earthcontrol.de/nm01.jpg

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 15/03/2010 at 12:56, xxxxxxxx wrote:

hmmmm...   what are you using for the  "padr"  and for "v"...  ?

in

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 15/03/2010 at 13:05, xxxxxxxx wrote:

i am using this:

``````
v = ToPoly(baseMesh)->GetPolygonR();
``````

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 15/03/2010 at 13:12, xxxxxxxx wrote:

are you creating a rotation matrix based on a specific polygon.  ?  When I get home I'll show you how I am doing it.  I'm driving home right now.

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 15/03/2010 at 13:17, xxxxxxxx wrote:

no, i am just using clone->SetRot(normal);
is this wrong??

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 15/03/2010 at 13:41, xxxxxxxx wrote:

I'm pretty sure that if you are trying to rotate objects based on a polygon then you will need to create a rotation matrix for that polygon and then make the matrix of the object you want to rotate equal to the rotation matrix.   That's how I understand it.

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 15/03/2010 at 13:51, xxxxxxxx wrote:

well, what is so strange is that it works for spheres, but not for terrain objects:
http://tempfiles.earthcontrol.de/nm02.jpg

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 15/03/2010 at 14:20, xxxxxxxx wrote:

Here's how I am doing it.

``````
//ROTATION MATRIX
//GetPoints

Vector c = polyLocation; //midpoint
Vector p = points[lngA]; //polygon point
Vector n = CalcFaceNormal(points, selectedPoly[lngI]); //normal

Vector scale = Vector(Len(opMatrix.v1), Len(opMatrix.v2), Len(opMatrix.v3)); //Get Scale

//Contruct Matrix
Matrix rotMatrix;

rotMatrix.off = p; //The base of the matrix
rotMatrix.v1 = !((p - c)%n); //X axis points toward the second point
rotMatrix.v2 = !(rotMatrix.v1 % n);//Y Axis is perpendicular to the X axis
rotMatrix.v3 = !(n); //Z Axis is along the normal

rotMatrix.v1 = !(rotMatrix.v1 * scale.x);
rotMatrix.v2 = !(rotMatrix.v2 * scale.y);
rotMatrix.v3 = !(rotMatrix.v3 * scale.z);

//place the first object within the rotation matrix
firstSelection->SetMg(rotMatrix);

``````

This is working quite well now..    creating a rotation matrix gives me the exact rotation of that specific polygon.

Hope this helps you.

~Shawn

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 15/03/2010 at 14:34, xxxxxxxx wrote:

thank you so much! now after incorporating the CalcFaceNormal like you did, everything works fine.

cheers,
Ello

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 15/03/2010 at 14:59, xxxxxxxx wrote:

Great.  I'm glad it worked for you.   I have got it now so everything is working 100% for me too....   Good day for us both!

~Shawn