clc
close all
clear
[x,y,z] = meshgrid(-2:1:2,-2:1:2,-2:1:2);
x = x(:);
y = y(:);
z = z(:);
[k1,av1] = convhull(x,y,z);
trisurf(k1,x,y,z,'FaceColor','cyan');
hold on
scatter3(x(k1(:,1)),y(k1(:,2)),z(k1(:,3)))
n=3;
m=1000;
r=2;
u=x(k1(:,1));
v=y(k1(:,2));
w=z(k1(:,3));
c(1)=(min(u)+max(u))/2;
c(2)=(min(v)+max(v))/2;
c(3)=(min(w)+max(w))/2;
X = randn(m,n);
s2 = sum(X.^2,2);
X = X.*repmat(r*(gammainc(s2/2,n/2).^(1/n))./sqrt(s2),1,n);
X(:,1:n)=X(:,1:n)+c(1,1:n);
hold on;
scatter3(X(:,1),X(:,2),X(:,3))
xyz=[x y z];
in = inhull(X,xyz,k1);
X_new=[];
for i=1:m
if in(i)==1
X_new(end+1,:)=X(i,:);
end
end
N=20;
a=randperm(length(X_new),N);
output=X_new(a,:);
hold on
scatter3(output(:,1),output(:,2),output(:,3))