n
랜덤 포인트가 모두 1
인 큐브를 생성하려고합니다. 행렬을 사용하여 각 열이 (x,y,z)
큐브의 점이되도록 행렬을 사용하고 있습니다. 때때로 코드가 작동하고 때로는 작동하지 않습니다. 그 이유는 무엇인지 알 수 없습니다 ... 어떤 도움이나 조언도 코드의 입력은 큐브의 한 변의 길이와 사용하려는 포인트의 수입니다.최소 거리가있는 임의의 점 [옥타브]
업데이트 : 코드에 대한 설명 :
그래서이 3
열 및 n
행으로 임의의 행렬을 만들 예정이다. 큐브의 n
점의 좌표는 (x,y,z)
입니다. 구속 조건은 큐브 lx
의 크기와 점 사이의 최소 거리 d
입니다. 그래서 내 코드는 nx3
랜덤 행렬을 생성하고 각 요소를 확인하여 거리가 적어도 1
인지 확인합니다. 그렇지 않은 경우 해당 요소에 대해 새 점을 생성합니다. 그런 다음 다시 돌아가서 모든 이전 지점을 확인하여 해당 제한을 유지합니다. 일부 포인트의 거리가 1
미만이므로 실패합니다. 충분한 수표를 내지 못했는지 아니면 다른 것이 있는지 나는 모른다.
입력 값 : 큐브의
- 길이 : 포인트
lx = 7.35
- 번호 :
n = 256
는
코드 :
function [A]=distribution(lx,n)
format long;
A=0;
new=0;
d=1;
A=rand(n,3).* [lx];
A=reshape(A.' ,3,n);
while(new <= (n+1))
for i=1:(n-1)
for j=(i+1):n
r=A(:,i) - A(:,j);
rsum= sum(dot(r,r));
if(rsum < 1.0)
A(:,j)=rand(1,3).* [lx];
end
end
for k=1:i-1
r2=A(:,k) - A(:,i);
r2sum= sum(dot(r2,r2));
if(r2sum < 1.0)
A(:,j)=rand(3,1).* [lx];
end
end
end
new=new +1;
endwhile
A=reshape(A.' ,n,[]);
"때로는 작동하고 때로는 작동하지 않습니다"를 발굴 할 수 작동하지 않을 경우 매우 모호합니다. 귀하의 코드는 무엇을하고 어떻게 정확히 실패합니까? – beaker
그래서 3 개의 열과 N 개의 행이있는 임의의 행렬을 생성해야합니다. 이는 큐브의 점에 대한 XYZ 좌표를 나타냅니다. 제약 조건은 입방체의 크기 (lx)와 점 사이의 최소 거리 (d)입니다. 그래서 내 코드는 nx3 랜덤 행렬을 생성하고 각 요소를 확인하여 해당 요소의 새로운 점을 생성하지 않으면 거리가 최소 1인지 확인합니다. 그런 다음 다시 돌아가서 모든 이전 지점을 확인하여 해당 제한을 유지합니다. 일부 포인트의 거리가 1보다 작으므로 실패합니다. – Oppenheimer
임의의 프로세스이므로 때때로 실패 할 것으로 예상됩니다. 입력 값으로 전달하는 값은 무엇입니까? [편집]을 클릭하여 원래 질문에 업데이트 나 설명을 추가하십시오. – beaker