在过去的几天里,我一直在为这个问题绞尽脑汁,而对于我的一生来说,似乎可以找到问题代码。本质上,此代码生成具有 x 和 y 坐标和半径的随机数量的对象,然后代码检查新对象是否与任何其他对象发生碰撞,如果没有,则将其添加到主数组中然后返回调用函数。我的问题是,当我加载页面时,所有对象都在那里,但有些对象仍然相互碰撞,我不知道为什么。任何人都可以看到这个问题吗?
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
}
]);