Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

New to MATLAB?

Convert 3D polygon into homogeneous matrix

Asked by João Viveiros

João Viveiros (view profile)

on 13 Oct 2012

Hi. I have defined a 3D polygon creating a vertice and a face matrix to use the function Patch. Now i would like to know: how do i transform my 3D polygon in an homogeneous matrix.

Any clues ?

Thanks for the help.

2 Comments

Walter Roberson

Walter Roberson (view profile)

on 13 Oct 2012

What would the homogenous matrix consist of? For example are you looking to render it into a matrix? If so what value do you want at each location, taking into account that the polygon would in general be colored ?

João Viveiros

João Viveiros (view profile)

on 13 Oct 2012

I need it homogeneous in order to aply geométric transformatrions to my polygon. I have this at the moment:

clc;clear all;close all;
vert=[2,0,0;2,1,0;1,1,0;1,0,0;1,0,1;2,0,1;2,1,1;1,1,1;1,2,1;0,2,1;0,1,1;
      0,1,0;1,2,0;0,2,0;0,0,0;1,1,2;0,1,2;0,0,2;1,0,2;0,0,1;];
faces=[1,2,3,4;2,3,8,7;1,4,5,6;5,6,7,8;1,2,7,6;
       3,8,9,13;3,12,14,13;9,13,14,10;11,12,14,10;8,9,10,11;
       19,18,17,16;20,11,17,18;16,8,11,17;5,8,16,19;18,19,5,20;
       20,11,12,15;5,20,15,4;3,4,15,12;];
P=patch('Faces',faces,'Vertices',vert,'FaceColor','r');
axis equal;
axis([-6 6 -6 6 -6 6])
xlabel('x');ylabel('y');zlabel('z');
hold on;grid on;
view(140,40);

'I need that P to be the homogeneous matrix so i can apply the geométric transformation to it by doing B=translation(3,0,0)*P (For example)

B is the new polygon transformed.

thanks

João Viveiros

João Viveiros (view profile)

Tags

Products

No products are associated with this question.

3 Answers

Answer by Walter Roberson

Walter Roberson (view profile)

on 13 Oct 2012
Accepted answer

The matrix "vert" in your code is your homogenous matrix for your purposes described in your comment.

1 Comment

João Viveiros

João Viveiros (view profile)

on 13 Oct 2012

Thanks. I homegenised my "vert" then, did a transformation to that matrix then i just re-patched.

Walter Roberson

Walter Roberson (view profile)

Answer by Matt J

Matt J (view profile)

on 13 Oct 2012

Couldn't you just transform all of the vertices and recreate the patch? E.g.,

 vert_translated=bsxfun(@plus, vert, [3,0,0]);
 P=patch('Faces',faces,'Vertices',vert_translated,'FaceColor','r');

Note that invertible linear/affine transformations don't change the faces.

1 Comment

João Viveiros

João Viveiros (view profile)

on 13 Oct 2012

I did that ;) thanks. its working

Matt J

Matt J (view profile)

Answer by Matt J

Matt J (view profile)

on 13 Oct 2012

Instead of using PATCH, you could also consider using these 2 FEX files,

http://www.mathworks.com/matlabcentral/fileexchange/30892-representing-polyhedral-convex-hulls-by-vertices-or-inequalities

http://www.mathworks.com/matlabcentral/fileexchange/9261-plot-2d3d-region

So first, this willl let you obtain your polyhedron as a set of inequalities A*x<=b

 [A,b]=lcon2vert(vert);

Now you can transform the polyhedron as you like by appropriately transforming A and b. In the case of your translation, this would be

 Anew=A;
 bnew=b-A*[3;0;0];

Finally, you can plot using the plotregion() tool

 plotregion(-Anew,-bnew);

0 Comments

Matt J

Matt J (view profile)

Contact us