How to resize (shrink) 3d surface ?

4 views (last 30 days)
Teerapong Poltue
Teerapong Poltue on 21 Nov 2020
Commented: Image Analyst on 21 Nov 2020
syms x y z
f = @(x,y,z) cos(x) + cos(y) + cos(z) ;
interval = [-pi:0.1:pi];
a= interval ;
b= interval;
c= interval;
[X,Y,Z] = meshgrid(a,b,c);
data = f(X,Y,Z);
p = patch(isosurface(a,b,c,data,0));
cdata = smooth3(rand(size(data)),'box',7);
isonormals(X,Y,Z,data,p)
isocolors(X,Y,Z,cdata,p)
p.FaceColor = 'interp';
p.EdgeColor = 'none';
view(150,30)
daspect([1 1 1])
colorbar
axis tight
camlight
lighting gouraud
Now I have plot a unit cell with domension of -pi to pi
I would like to have the same shape but shrink to a smaller size let say 1*1*1
how can I do that

Answers (1)

Image Analyst
Image Analyst on 21 Nov 2020
1*1*1 would be a single 1*1*1 would be a single element, right? What sense does that make?element, right? What sense does that make? You can vary the number of elements in the grid by adjusting the starting, step, and stopping parameters in this line:
interval = [-pi:0.1:pi];
Just look at the length of interval. Alternatively you could use linspace() to more directly specify how many elements there should be:
interval = linspace(-pi, pi, numElements);
  2 Comments
Teerapong Poltue
Teerapong Poltue on 21 Nov 2020
I mean now I have 1 element size of -pi to pi in 3D.
But I want 1 element size of -0.5 to 0.5 (with full element so interval have to remain -pi to pi)
Image Analyst
Image Analyst on 21 Nov 2020
2 pi is not even divisible by 0.5 so you have to decide what's more important: the spacing per element, or the ending values of the range.
>> 2*pi/0.5
ans =
12.5663706143592
You can't have 12.566 elements. You can have either 13 or 14 with a spacing of 0.5 but then the ending value won't be pi:
>> interval = -pi : 0.5 : pi
interval =
Columns 1 through 11
-3.1416 -2.6416 -2.1416 -1.6416 -1.1416 -0.64159 -0.14159 0.35841 0.85841 1.3584 1.8584
Columns 12 through 13
2.3584 2.8584
Or you can have exactly 13 elements with the starting point = -pi and the ending point = pi, but the spacing (step) won't be exactly 0.5:
>> interval = linspace(-pi, pi, 13)
interval =
Columns 1 through 11
-3.1416 -2.618 -2.0944 -1.5708 -1.0472 -0.5236 0 0.5236 1.0472 1.5708 2.0944
Columns 12 through 13
2.618 3.1416

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!