過去幾天我一直在這個問題上絞盡腦汁,對於我的生活似乎可以找到問題代碼。本質上,這段代碼生成一個隨機數量的對象,其中包含一個x和y座標和一個半徑,然後代碼檢查新對象是否與任何其他對象相沖突,如果沒有,那麼它會將它添加到主數組中然後返回調用函數。我的問題是,當我加載頁面時,所有的對象都在那裏,但一些仍然相互碰撞,我不明白爲什麼。任何人都可以看到問題嗎?PHP代碼未能給出corrent結果最有可能的邏輯錯誤
public function Generate($chunkX, $chunkY) {
if (!(isset($this->ChunkX) && isset($this->ChunkY))) {
$this->ChunkX = $chunkX;
$this->ChunkY = $chunkY;
}
$counter = 0;
$this->ObjectLocations = array();
$totalAstroids = $this->GetAstroidNo();
while ($counter < $totalAstroids) {
$tempObjectLocations = array();
//X and Y Chunk Coordinates
$tempObjectLocations['chunkX'] = $chunkX;
$tempObjectLocations['chunkY'] = $chunkY;
//X and Y coordinates for the object.
$tempObjectLocations['coordX'] = rand(4, 60);
$tempObjectLocations['coordY'] = rand(4, 60);
$tempObjectLocations['radius'] = rand(4, 12);
//Checks if objects already exist in array
if (count($this->ObjectLocations) > 0) {
//if the object does not collide with any other object
//the location will be added into the database
if ($this->isColliding($tempObjectLocations) == false) {
array_push($this->ObjectLocations, $tempObjectLocations);
$counter += 1;
}
// if object is the first created insert into table.
} else {
array_push($this->ObjectLocations, $tempObjectLocations);
$counter += 1;
}
}
return $this->ObjectLocations;
}
public function isColliding($obj1) {
//Checks if object conflicts with nearby objects
$a = count($this->ObjectLocations);
for ($i = 0; $i < $a; $i++) {
$obj2 = $this->ObjectLocations[$i];
//Calculates the distance between two points
$distance = sqrt(($obj1['coordX'] - $obj2['coordX'])^2 + ($obj1['coordY'] - $obj2['coordY'])^2);
//Checks if the distance between the two objects is
//more than the radius of both objects added together
if ($distance < ($obj1['radius'] + $obj2['radius'])) {
return true;
}
}
return false;
}
JSON結果
parseResponse([
{
"chunkX": "1",
"chunkY": "1",
"coordX": 54,
"coordY": 17,
"radius": 8
},
{
"chunkX": "1",
"chunkY": "1",
"coordX": 41,
"coordY": 57,
"radius": 12
},
{
"chunkX": "1",
"chunkY": "1",
"coordX": 42,
"coordY": 36,
"radius": 8
},
{
"chunkX": "1",
"chunkY": "1",
"coordX": 40,
"coordY": 58,
"radius": 8
},
{
"chunkX": "1",
"chunkY": "1",
"coordX": 25,
"coordY": 58,
"radius": 12
},
{
"chunkX": "1",
"chunkY": "1",
"coordX": 57,
"coordY": 8,
"radius": 10
},
{
"chunkX": "1",
"chunkY": "1",
"coordX": 46,
"coordY": 17,
"radius": 11
},
{
"chunkX": "1",
"chunkY": "1",
"coordX": 42,
"coordY": 29,
"radius": 8
},
{
"chunkX": "1",
"chunkY": "1",
"coordX": 18,
"coordY": 58,
"radius": 11
},
{
"chunkX": "1",
"chunkY": "1",
"coordX": 59,
"coordY": 5,
"radius": 11
},
{
"chunkX": "1",
"chunkY": "1",
"coordX": 15,
"coordY": 56,
"radius": 12
}
]);
你能與所產生的$這個 - > ObjectLocations一個更新的var_dump你的問題? – 2013-04-22 12:50:48
當然不適合註冊日期 – Ardenexal 2013-04-23 00:08:40