ホームページ > バックエンド開発 > C++ > 点が線の左側にあるか右側にあるかを効率的に判断するにはどうすればよいでしょうか?

点が線の左側にあるか右側にあるかを効率的に判断するにはどうすればよいでしょうか?

Patricia Arquette
リリース: 2025-01-21 05:11:08
オリジナル
189 人が閲覧しました

How Can We Efficiently Determine if a Point Lies to the Left or Right of a Line?

点が線のどちら側にあるかを決定します

線に対する点の位置を決定するには、フレームを確立する必要があります。このフレームワークには、直線上の 2 つの点 (A と B) を選択し、それらの間に想像上の線を形成することが含まれます。目標は、指定された点のセットを 2 つの異なるセット (線の左側にある点と線の右側にある点) に分割することです。

最初に、ベクトル A-Z-B 間の角度を使用して点 Z の位置を決定してみます。 180 度未満の角度は線の右側にあり、180 度を超える角度は左側にあると仮定します。ただし、数学的な制限により、このアプローチでは計算された角度が常に 180 度未満になるため、一貫性のない結果が生じます。

この制限を克服するためのより信頼性の高い方法は、外積を使用することです。直線 A--B と点 C が与えられた場合、次の式を使用して点 C の位置を決定できます。

<code class="language-javascript">isLeft(a, b, c) {
  return (b.x - a.x)*(c.y - a.y) - (b.y - a.y)*(c.x - a.x) > 0;
}</code>
ログイン後にコピー

点が直線の右側にある場合、この式で計算される値は 0 より大きく、点が直線の左側にある場合、値は 0 より小さくなります。が同一線上にある (つまり、点 C が直線 A--B 上にある) 場合、値は 0 です。

水平線の場合、式を変更して点 C が線の上か下かを判断できます。

<code class="language-javascript">isAbove(a, b, c) {
  return (c.y - a.y) > 0;
}</code>
ログイン後にコピー

以上が点が線の左側にあるか右側にあるかを効率的に判断するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート