How to get random points from upper semisphere
1 次查看(过去 30 天)
显示 更早的评论
Hello eveyone,
I use this code to get random points from a sphere with radius 5:
clear all
clc
fullFileName = fullfile(pwd, 'DataPoints.txt')
% Open a text file.
fileHandle = fopen(fullFileName, 'wt');
% Write out the things we want to write out.
rng(0,'twister')
rvals = pi*rand(100,1)+pi/2;
azimuth = 2*pi*rand(100,1);
[x,y,z] = sph2cart(azimuth,rvals,5);
figure
plot3(x,y,z,'.')
axis equal
fprintf(fileHandle, '{%f, %f ,%f},',[x,y,z]');
fprintf(fileHandle, '[%f, %f ,%f],',[x,y,z]');
fprintf(fileHandle, '%f, %f , %f;',[x,y,z]');
% Close the file.
fclose(fileHandle);
% Open it in notepad (Windows OS only)
winopen(fullFileName);
, but I want to have random points from upper semisphere with this radius.
Thanks in advance.
0 个评论
采纳的回答
更多回答(1 个)
Bruno Luong
2020-8-19
编辑:Bruno Luong
2020-8-19
Your code won't generate uniform point on half sphere, there is a bigger density on the north pole (try to generate with 10000 points you'll see).
A better approach would be
radius = 5;
xyz = randn(3,100);
xyz = xyz .* (radius ./ sqrt(sum(xyz.^2,1)));
x = xyz(1,:);
y = xyz(2,:);
z = abs(xyz(3,:));
3 个评论
Bruno Luong
2020-8-19
You have very old matlab version, replace with
xyz = bsxfun(@times, xyz, radius ./ sqrt(sum(xyz.^2,1)));
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!