2 views (last 30 days)

The code below is great which generates a cone of infinite points. Could anyone help me how to fix the number of points. For example, if i want only 10, 000 points or 20,000 point on the cone. How can i fix on the cone using code below. Thanks for support and help. Regards.

r1=input('enter radius');

r=r1:-0.5:0;

h=input('enter ht');

% --------------------

xvec = floor(-r1):ceil(r1);

yvec = xvec;

hvec = 0:ceil(h);

[X, Y, H] = ndgrid(xvec, yvec, 0:floor(h));

r_at_H = r1 * (1 - H/h);

is_in_cone = abs(X) <= r1 & abs(Y) <= r1 & H <= h & sqrt(X.^2+Y.^2) <= r_at_H;

Xc = X(is_in_cone);

Yc = Y(is_in_cone);

Hc = H(is_in_cone);

pointsize = 20;

figure(2)

scatter3(Xc, Yc, Hc, pointsize, 'filled')

Bruno Luong
on 19 Aug 2020

Edited: Bruno Luong
on 20 Aug 2020

Grid pattern

The volume of the cone of base radius R and height h

Vcone = pi*R^2*h/3

Assuming you dsicretize by small volume (dx x dx x dx), you 'll get

N ~ Vcone/dx^3. So if you want an approximative of N with grid pattern:

% Cone parameters

R = 10;

h = 10;

N = 10000;

dx = (pi*R^2*h/3/N)^(1/3);

rvec = linspace(-R,R,ceil(2*R/dx));

hvec = linspace(0,h,ceil(h/dx));

[X,Y,Z] = ndgrid(rvec,rvec,hvec);

is_in_cone = (X.^2+Y.^2) <= (R/h*(h-Z)).^2; % Edit bug fix

Xc = X(is_in_cone);

Yc = Y(is_in_cone);

Zc = Z(is_in_cone);

figure(3)

pointsize = 3,

scatter3(Xc, Yc, Zc, pointsize, 'filled')

axis equal

numel(Xc) % should be close to N

KSSV
on 18 Aug 2020

r1=input('enter radius ');

m = input('enter number of points you want along radius') ;

r = linspace(r1,0,m);

h = input('enter ht');

m = input('enter number of points you want along height') ;

% --------------------

xvec = floor(-r1):ceil(r1);

yvec = xvec;

hvec = 0:ceil(h);

[X, Y, H] = ndgrid(xvec, yvec, linspace(0,floor(h),m));

r_at_H = r1 * (1 - H/h);

is_in_cone = abs(X) <= r1 & abs(Y) <= r1 & H <= h & sqrt(X.^2+Y.^2) <= r_at_H;

Xc = X(is_in_cone);

Yc = Y(is_in_cone);

Hc = H(is_in_cone);

pointsize = 20;

figure(2)

scatter3(Xc, Yc, Hc, pointsize, 'filled')

KSSV
on 19 Aug 2020

KSSV
on 19 Aug 2020

You have used in the following lines:

xvec = floor(-r1):ceil(r1);

hvec = 0:ceil(h);

[X, Y, H] = ndgrid(xvec, yvec, 0:floor(h));

Replace them with linspace by specifying the number of points you want.

Opportunities for recent engineering grads.

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

Start Hunting!
## 0 Comments

Sign in to comment.