블록이 1000x600이라고 말하고,이 블록에서 20x20 블록을 무작위로 채워야 만 총 1500 개를 제공해야합니다.PHP : 중복되지 않은 임의 위치 기능
하지만 임의의 x, y 위치에 이들을 배치 했으므로 이미 할당 된 블록을 덮어 쓰지 않도록하고 싶습니다. 그래서 내 질문과 아마도이 작업을 수행하기 위해 내가 뭘했는지/할 일을 설명하는 더 좋은 방법입니다.
CODE :
$Ypos = 0;
$Xpos = 0;
$posStore = [];
$box_size =20;
//-- this will be set by another mehtod and will be a rand ome nuber between 5 and 1500
//-- but set to the mx for now.
$number_of_blocks = rand(5, 1500);
//-- loop through the total number of blocks set
for ($i=1; $i <=$number_of_blocks; $i++) {
//-- set the x,y position for th eblock
self::SetPosition();
//-- add the block code here
//.........
}
//-- Set th ex,y position of the block
private function SetPosition(){
//-- get the positions
$this->Ypos = self::randYPos();
$this->Xpos = self::randXPos();
//-- check that we do not already have that position within the array else re-run this function
if(in_array([$this->Ypos,$this->Xpos], $this->posStore)) {self::SetPosition();}
//-- if ok then lets add this position to the array
array_push($this->posStore,[$this->Ypos,$this->Xpos]);
//-- return true
return true;
}
//-- set the ypos
private function randYPos(){
$yPos = rand(0 , self::IMAGE_WIDTH);
//-- as the boxes need to be positioned relative to their size (20)/incremented by their size so no
//-- overlapping is occured
return ($yPos % $this->box_size == 0) ? $yPos :self::randYPos();
}
//-- set the xpos
private function randXPos(){
$xPos = rand(0 , self::IMAGE_HEIGHT);
//-- see ypos explaination
return ($xPos % $this->box_size == 0) ? $xPos :self::randXPos();
}
기본적으로 내가 임의의 X, 그것은 중복 방지 할 수 있도록 상자의 크기에 의해 증가 Y POS를 받고있는 중이 야.
다음 두 값을 다시 전달하고 위치 배열 ($ posStore)을 검사하여 위치 집합이 아직 할당되지 않았는지 확인한 다음 위치 배열 ($ posStore)에 새 위치 배열을 추가합니다.
하지만 내가 위의 난 아직 내 주요 1000x600 블록 내에서 공백이 최대에 총을 설정 좋아하는 것처럼 작동하지 않는 것 등
덮어 쓰기 위치의 일부 인스턴스가있는 것이 더 나은가요 나는 뭔가를 놓치고있는이 (쓸데없는) 글을 쓰는 길. 셔플 대답 (들) 전체 문제가 해결되지 않았지만
UPDATE
그것은 내가 그것을 해결하는 데 좋은 요인이었다.내 배열을 완전히 채울 수 없기 때문에 셔플 링이 여전히 선형 효과를 표시하므로 배열 전체를 0,0에서 채우기 만하면됩니다.
나는 다음 루프하고 그들에게 결과의 혼합 가방을 준 단행들이 배열 합계로했다 그럼 간단한 요청에 필요한 총을 복용
:-) 셔플하기 위해 PHP 셔플을 사용했다. 당신은 행과 열에서 그들을 배치 할 수 있습니다 도움
'DOM' 또는 서버 측에서 PHP로 생성 한 이미지는 무엇을 다루고 있습니까? –
는 나에게 숙제처럼 보입니다. 어쨌든 왜 무작위로 만들지? 논리적으로 생각해 보자. 포장용 슬래브를 쌓아 두는 것부터 왼쪽 상단에서 시작하여 고정 된 경계 상자 크기를 알고, 슬래브 크기를 알면 모든 슬래브의 왼쪽 상단에 x 및 y 위치를 계산할 수 있습니다. – Dave
예! 실제로 선형 또는 무작위로 매개 변수가있는 함수에 대한 호출이 없습니다. 선형 함수는 잘 작동합니다. probs는 무작위입니다. –