因此请考虑以下图片:
这是一个350x350 px png图像。
我编写了以下 laravel 5.7 代码来确定什么是水和什么不是水:
fetch()
这很完美,需要一些时间,但是可以。当我们遇到图片的蓝色部分时,它将$e = $db->query("SELECT `username`, `membership` FROM `users` WHERE `expire` != ''")->fetchAll();
设置为true。
我现在想做的是检查不仅是我们在水上的像素,而且如果旁边没有,则随机检查(<?php
use Illuminate\Database\Seeder;
use App\Modules\Locations\Services\CreateMapService;
use ChristianEssl\LandmapGeneration\Struct\Color;
use App\Modules\Locations\Models\Location;
class SurfaceLocations extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$water = new Color(66, 129, 178);
$land = new Color(23, 132, 72);
$createImage = new CreateMapService($land, $water, 350, 350, 'random_map');
$createImage->generateMap('surface');
$contents = Storage::disk('maps')->get('surface.png');
$imageResource = imagecreatefromstring($contents);
$waterR = 112;
$waterG = 219;
$waterB = 255;
for ($x = 0; $x <= 349; $x++) {
for($y = 0; $y <= 349; $y++) {
$rgb = imagecolorat($imageResource, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
if ($r === $waterR && $g === $waterG && $b === $waterB) {
Location::create([
'x' => $x,
'y' => $y,
'is_water' => true
]);
} else {
Location::create([
'x' => $x,
'y' => $y,
'is_water' => false
]);
}
}
}
}
}
)是否应该设置{{1 }}为真。
这里的想法是在“海岸”沿岸设置一个港口,但有时只能这样做。 (这样,海岸线的每个像素都不是一个端口,但是沿着该海岸线可能会有一个或多个端口。
我现在拥有的逻辑可以修改以检查它,但是问题是如何?
我唯一能想到的是增加x和y以及减少它们,并在我们上水时检查那些值是否不是水,如果不是,请检查是否通过了“检查”并将is_water
设置为true。
有什么想法吗?
答案 0 :(得分:2)
这只是一个想法,但是在一个学校项目中,我使用了一种连通性算法来检查像素相邻性,它们可以通过在Google上通过快速的Google搜索获得,并以多种语言实现,因此也许您可以寻找适合并适应的语言直到像素和邻居像素检查中的“ is_water”满足您的需求。
结合一个标志来确定是否要放置端口可以解决该问题。
还要指出(rand(0,100)> = 50)与(rand(0,2)> = 1)(我认为)相同,但有50%的机会成为端口。 。也许您可以进行调整以适合您的港口人口。
希望我能帮助您:D