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에서 Random Number Generation에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!