だから、私はあなたの細胞が正方形であると想像しました...それらが単位正方形であるとしましょう。したがって、 float または double である のようなポイントの座標がある場合、それらは cell にあります。
- どのセルが線の終点であるかを知る必要があります
- 端点から端点までまっすぐ歩き、セルごとに壁かどうかをテストします
- 壁が見つかった場合は false を返し、それ以外の場合は true を返します。
あるエンドポイントから別のエンドポイントまで歩くには、各軸のデルタを計算する必要があります (delta_x と delta_y を呼び出します。ここではセルについて話しているため、これらの値は「int」です)。つまり、垂直方向に移動するセルの数と、水平に。あなたは2つのうち最大のものを取ります。その最大値をループに使用します。この値が D = max(delta_x, delta_y) であり、XX と YY が 1 つのエンドポイントのセルの座標であるとしましょう。
float step = 1.0f / D;
float current_location = 0.0;
for (int i = 0; i <= D; ++i, current_location += step)
{
int cur_x = XX + current_location * delta_x;
int cur_y = YY + current_location * delta_y;
if (intersect_wall(cur_x, cur_y))
return false;
}
return true;
それだけです...これをあなたの機能に適応させてください。