php – 计算周长值
我有一个矩形地图,存储为多维数组(即$map [row] [col]),我必须追踪玩家看到哪些方块,放在这张地图上的任何位置.
玩家可见性是圆形的,半径未知(但在运行时给出)我只需要整数解. 我知道周长公式是 x^2 + y^2 <= r^2 但我怎么能存储一切? 最好的是多维数组(即__ $sol [x] [y] __). 计算平方 $this->vision_offsets_2 = array(); //visibility given as r^2 $mx = (int)(sqrt($this->viewradius2)); $mxArr = range($mx * -1,$mx + 1); foreach ($mxArr as $d_row) { foreach ($mxArr as $d_col) { $this->vision_offsets_2[] = array($d_row,$d_col); } } 这是我如何应用它 foreach($player as $bot) { foreach($visibility as $offset) { $vision_row = $offset[0] + $bot[0]; $vision_col = $offset[1] + $bot[1]; if(isset($map[$vision_row][$vision_col])) { if( $map[$vision_row][$vision_col] == UNSEEN) { $map[$vision_row][$vision_col] = LAND; } } } } 在这里你可以找到机器人视图:你可以看到一个非完美的圆圈. 解决方法
结构体
您已经在网格中引用了地形.将地形对象存储在这些网格值中.将属性应用于这些对象.检查类似的东西 $map[$x][$y]->isVisible($player); 你需要一些方法来设置视觉和测试,以检查通过可以看到它的用户列表传递的用户.当你在它时,在这些对象中设置其他相关方法(我看到对land … isLand()和isWater()的引用可能?). 您甚至可以在对象内部进行视觉级联,这样您只需要移动用户的位置,并且该对象负责触发所有代码以将附近的地块设置为可见. 数学 我们给予周长. double diameter = circumference / 3.14159 double radius = diameter / 2 //Normally done in one step / variable 现在我们必须知道两点之间的距离来比较它.让我们使用map [4] [7]和map [3] [9]. int x0 = 4; int y0 = 7; int x1 = 3; int y1 = 9; double distance = Math.sqrt( Math.pow(x0 - x1,2) + Math.pow(y0 - y1,2) ); System.out.println(distance); //2.23606797749979 测试距离>半径. 测试每个方块 >将上述方法放在一个方法中:visibleFrom(Square target) > radius在比较时应该是一个全局可访问的静态变量. > target.getX() >可以进行一些优化 >只有当它们在广场上时才检查圆形距离. >请记住,过早优化和过度优化是陷阱. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |