How to expand/shrink 3D Polygon in 2D directions (X-Y)?

3 vues (au cours des 30 derniers jours)
Faez Alkadi
Faez Alkadi le 10 Déc 2017
Modifié(e) : Faez Alkadi le 7 Avr 2018
I have a xyz=17x3 array which forms an open square shape. I want to expand the shape (inside or outside only) with respect to xy_directions only and get a new array xy=17x2 . So I can add the third column (Z) to the new array xy from the original array xyz and end up with a third array XYZ1=17x3. where * XYZ1=[xy(:,1),xy(:,2),xyz(:,3)]*. In this case, I end up with expanded shape in xy_directions but keep (Z) fixed.(which I'm wishing for)
I tried the function expandPolygon from geom2d. But the output array has some rows filled with (Inf) instead of numbers, even though it has the same length as original array xyz.
Hope you can help me with that Thank you so much.

Réponses (3)

Matt J
Matt J le 10 Déc 2017
Modifié(e) : Matt J le 10 Déc 2017
I may not fully understand the question. You have a square floating in 3D space. You want to expand or contract the square within the same plane that it exists now? If so, then you can simply do (assuming you have R2016b or higher) as follows:
xyz_new= c*(xyz-mean(xyz))+mean(xyz);
where c is an expansion or contraction factor. For example, with c=1.5, you would get the orange dots below.
  11 commentaires
Faez Alkadi
Faez Alkadi le 11 Déc 2017
I won't get get Inf in the array if i remove it.
But, the thing is i can't remove it. Because it might be parallel in X or Y but Z is changing. So if I remove it I would lose accuracy. this data here is just an example where Z is fixed. But I have other data where Z is changing.

Connectez-vous pour commenter.

Matt J
Matt J le 11 Déc 2017
Modifié(e) : Matt J le 11 Déc 2017
To map everything into 2D
[~,~,V]=svd(xyzc, 0);
Now you can use the geom2D toolkit freely on the 2D data set, xy to generate xy2. As we've discussed, remove redundant colinear points to avoid Infs. To map xy2 back to the original 3D coordinate system,
XYZ1= xy2 * V(:,1:2).' + mu ;
  3 commentaires
Faez Alkadi
Faez Alkadi le 13 Déc 2017
i actually don't know how to do that. Can you help ?

Connectez-vous pour commenter.

Matt J
Matt J le 13 Déc 2017
Modifié(e) : Matt J le 13 Déc 2017
The attached file might be close to what you want. When I do
on your last xyz data set, I get the orange dots below,
  3 commentaires
Faez Alkadi
Faez Alkadi le 6 Avr 2018
you are right, That's why i tried to use the function expandPolygon from the toolbox geom2d for X and Y and then was planning to add Z after i get the expanded resutlt for X and y. But the result for (XY-NEW) had a different size than (XY), it wasn't able to mach with Z.

Connectez-vous pour commenter.


En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by