MATLAB Answers


How to create an Object insertable in a 3D plot?

Asked by Marco Froelich on 15 Aug 2017
Latest activity Commented on by José-Luis
on 18 Aug 2017
I would like to create three or four objects, made up of a number of individual points, that at my command can be inserted into a 3D plot, at the position and orientation I want to. How can this be done?
Essentially, I have a 3D Plot. I made other 3D plots, and would like to input some of those plots as objects into the new 3D plot. Its like grouping objects in Word i suppose. Through commands, is it possible to dictate orientation and position of that group.


Show 1 older comment
It would be easier if you had that object, and could input in where ever I want. Its a pretty complex object. And can you explain that?
What I mean there is no (easy, or sane) way you can have multiple 3D objects in one plot and manipulate them individually.
Also, I don't think the functionality is there to apply the transforms you seem want to an existing object: you will need to transform the underlying data.
Yes thats what I mean tho. As in control the position and orientation of the objects from code.

Sign in to comment.


1 Answer

Answer by Sky Sartorius on 17 Aug 2017

One approach could be to leverage the plotted object's XData, YData, and ZData, homogeneous coordinates, and the makehgtform function:
h = surf(peaks);
[X,Y] = meshgrid(h.XData,h.YData);
Z = h.ZData;
sz = size(Z);
M = [X(:) Y(:) Z(:) ones(numel(Z),1)]';
t = makehgtform('axisrotate',[1,2,3],pi/4,'translate',[2,10,-50]);
% Orient and position your object where you want it.
Mt = t*M;
h.XData = reshape(Mt(1,:),sz);
h.YData = reshape(Mt(2,:),sz);
h.ZData = reshape(Mt(3,:),sz);


Could you elaborate on this? I dont fully understand what this helps you acheive :) is it taking the x,y,z data from a table of results?
The x, y, z data are stored in the figure. Sky is accessing them and changing them, which is what I had suggested in my original comment. You'd need to do that for each individual object.
I did not know makehgtform() existed.

Sign in to comment.