Script Efficiency for Plotting Spheres

I have some code that I found in another thread for plotting spheres in 3d cartesian space. This code works excellently, and with relative speed, if I'm plotting 1000 or fewer points. However, my data set (A, which contains x,y,z coordinates, as well as the radii of spheres, and the spheres have rigid boundaries) contains 60,000 spheres. Whether the spheres are uniform in size or not, plotting in excess of ~1000 points takes quite a long time. I'm wondering if there is a more efficient means of coding this.
Current script:
A = textread('out1404000.dump', '', 'headerlines', 9 );
xyz = A(1:1000, 4:6); %I'm currently taking rows 1:1000, but would prefer to plot all rows.
r2 = A(1:1000, 3); %I'm currently taking rows 1:1000, but would prefer to plot all rows.
[X,Y,Z] = sphere;
plotfun = @(c,r2) surf(X*r2 + c(1),Y*r2 + c(2),Z*r2 + c(3));
figure(3)
hold on
axis equal
grid on
h = cellfun(plotfun,num2cell(xyz,2),num2cell(r2),'UniformOutput',0);
Here is an example matrix containg columns, from left to right, of radius, x, y, z.
0.5000 -45.1766 -48.5664 0.4843
0.5000 -50.0416 -49.2495 0.4961
1.0000 -47.9513 -47.9333 0.9957
1.0000 -49.9313 -47.3837 1.8390
1.0000 -48.8482 -50.0006 0.9927
0.5000 -49.6122 -48.1071 0.4921
0.5000 -44.6511 -49.4200 0.4985
0.5000 -45.2021 -50.4440 0.4960
0.5000 -50.5025 -49.5157 1.3356
3.5000 -44.7595 -46.8283 4.0392
0.5000 -47.3386 -49.2080 0.4978
0.5000 -49.3041 -47.1562 0.4976
0.5000 -45.1425 -44.9833 0.4985
0.5000 -46.6837 -47.3048 0.5152
0.5000 -46.0781 -48.0926 0.4918
0.5000 -47.6858 -46.5254 0.4971
0.5000 -46.0302 -45.4569 0.4980
0.5000 -50.4889 -47.6416 0.4879
0.5000 -46.5252 -46.3235 0.4939
0.5000 -48.6297 -46.4955 0.8222
0.5000 -50.4515 -46.6441 0.4972
0.5000 -50.4994 -50.4919 0.4983
1.0000 -48.9826 -48.9605 2.6821
0.5000 -47.6021 -46.0127 1.3478
0.5000 -47.6011 -49.3150 1.4547
0.5000 -45.6905 -50.5026 1.3610
0.5000 -47.5423 -50.5057 0.4921
0.5000 -46.4702 -50.4537 0.4985
0.5000 -48.0139 -45.1044 1.3070
0.5000 -48.3227 -45.6022 0.4980
0.5000 -49.1370 -45.0227 0.4959
0.5000 -50.2749 -49.6185 2.3011
0.5000 -50.4952 -45.3492 0.4966
0.5000 -45.9672 -49.1762 0.4970
0.5000 -47.2015 -45.5727 0.4985
0.5000 -46.1117 -49.5996 1.3873
0.5000 -50.5028 -48.5089 0.9728
0.5000 -49.2593 -48.5942 1.2715
0.5000 -47.6558 -44.6532 0.4964
0.5000 -48.7230 -46.9734 4.4883
1.0000 -50.0172 -48.8540 4.3678
0.5000 -46.1410 -50.5063 4.7379
0.5000 -50.4774 -46.0237 1.2764
0.5000 -49.4659 -46.0204 0.4975
1.0000 -50.0074 -46.8401 3.7471
0.5000 -48.8859 -44.6244 1.3741
0.5000 -49.5962 -45.4225 1.2849
0.5000 -50.5010 -50.5006 1.4961
0.5000 -48.5182 -47.8545 4.9038
0.5000 -50.5004 -46.0659 2.2728

回答(1 个)

  • Try to reduce mesh
[X,Y,Z] = sphere(5);
  • If you have so many sphere maybe you don't need inside part
  • maybe slice function will be helpfull

类别

产品

版本

R2019b

回答:

2020-3-13

Community Treasure Hunt

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

Start Hunting!

Translated by