中点ライン生成アルゴリズムの C++ 実装

王林
リリース: 2023-09-09 19:49:10
転載
1183 人が閲覧しました

中点ライン生成アルゴリズムの C++ 実装

#直線は 2 つの点を結びます。グラフィックの基本要素です。線を引くには 2 つの点が必要で、画面上のこれら 2 つの点の間に線を描きます。グラフィックスではこれらの点をピクセルと呼び、各ピクセルは整数の座標に関連付けられます。整数座標を (x1, y1) および (x2, y2) の形式で指定します。ここで、x1 For では 3 つの異なるアルゴリズムが使用されています。画面上でライン生成を実行する場合、これらは -

    #DDA アルゴリズム
  • #ブレゼンハム ライン生成
  • #中点アルゴリズム

  • #中点アルゴリズム

    #中点を使用して線を描く手順 点線アルゴリズムは、-

## です。 #Use 現在の測位点は中点、つまり東(Xp 1, Yp)と北東(Xp 1, Yp) 1)を中点(Xp 1, Yp 1/2)として計算します。

    これで、中点によって画面上の次の座標の位置が決まります。つまり、
  • 中点が線の上にある場合、次の座標が決まります。東になります。
  • p>

      中点が線より下にある場合、次の座標は北東になります。
    • #さまざまな入出力シナリオを見てみましょう-

    • Input
    - int x_1 = 3, int y_1 = 3、int x_2 = 10、int y_2 = 8

output

outputstrong>- ライン生成アルゴリズムの中点は次のとおりです: 3,3 4 ,4 5,5 6,5 7,6 8,7 9,7 10,8

説明

- 与える座標は、x_1 = 3、x_2 = 10、y_1 = です。 3、y_2 = 8。したがって、ステップではまず dx = x_2 - x_1 を 10 - 3 = 7 として計算し、dy を y_2 - y_1 8 - 3 = 5 として計算します。 次に、dy が dx より小さいかどうかを確認します。ここで d を 5 - (7 / 2) = 2 として計算します。最初の点は x_1 と y_1 です。印刷してください。ここで、x_1 入力: int x_1 = 2、int y_1 = 2、int x_2 = 3、int y_2 = 4

出力: 行から生成セグメント アルゴリズムによって取得される中点は次のとおりです: 2,2 3,3 3,4

説明:

指定された座標は、x_1 = 2、x_2 = 2、y_1 = 3、y_2 = です。 4.中点セグメント生成アルゴリズムを適用することにより、すべての中点ピクセルが出力として計算されます。

次のプログラムで使用されるメソッドは次のとおりです。

入力整数点は int x_1、int y_1、int x_2、int y_2 です。関数 Mid_Point(x_1, y_1, x_2, y_2) を呼び出して線分を生成します。

関数内部 Mid_Point(x_1, y_1, x_2, y_2)
  • dx を x_2 - x_1 として計算し、dy を y_2 - y_1 として計算します
  • dy が dx 以下であるかどうかを確認し、d を dy - (dx / 2) に設定し、first_pt を x_1 に設定し、second_pt を y_1 に設定します
    • first_pt と Second_pt を出力します。
    • while ループを開始します。first_pt が x_2 より小さい場合、first_pt を 1 増やし、d が 0 より小さいかどうかを確認し、d を d dy に設定します。それ以外の場合は、d を d に設定します ( dy - dx) を計算し、seced_pt を 1 ずつ増やします。 first_pt と Second_pt を出力します。
    • それ以外の場合、dx が dy より小さい場合は、d を dx - (dy/2) に設定し、first_pt を x_1 に設定し、second_pt を y_1 に設定して、first_pt と Second_pt を出力します。
    • while ループを開始します。 Second_pt が y_2 未満の場合、ループ内で Second_pt をインクリメントします。 Second_pt は 1 ずつ増加します。 d が 0 未満であることを確認し、d を d dx に設定します。それ以外の場合は、d を d (dx - dy) に設定し、first_pt を 1 ずつ増やします。
    • first_pt と Second_pt を出力します。
    • #include<bits/stdc++.h>
      using namespace std;
      
      void Mid_Point(int x_1, int y_1, int x_2, int y_2){
         int dx = x_2 - x_1;
         int dy = y_2 - y_1;
      
         if(dy <= dx){
            int d = dy - (dx / 2);
            int first_pt = x_1;
            int second_pt = y_1;
      
            cout<< first_pt << "," << second_pt << "\n";
            while(first_pt < x_2){
               first_pt++;
               if(d < 0){
                  d = d + dy;
               }
               else{
                  d = d + (dy - dx);
                  second_pt++;
               }
                  cout << first_pt << "," << second_pt << "\n";
            }
         }
         else if(dx < dy){
            int d = dx - (dy/2);
            int first_pt = x_1;
            int second_pt = y_1;
            cout << first_pt << "," << second_pt << "\n";
            while(second_pt < y_2){
               second_pt++;
               if(d < 0){
                  d = d + dx;
               }
               else{
                  d += (dx - dy);
                  first_pt++;
               }
               cout << first_pt << "," << second_pt << "\n";
            }
         }
      }
      int main(){
         int x_1 = 3;
         int y_1 = 3;
         int x_2 = 10;
         int y_2 = 8;
         cout<<"Mid-Points through Line Generation Algorithm are: ";
         Mid_Point(x_1, y_1, x_2, y_2);
         return 0;
      }
      ログイン後にコピー

      出力
    上記のコードを実行すると、次の出力が生成されます
  • Mid-Points through Line Generation Algorithm are: 3,3
    4,4
    5,5
    6,5
    7,6
    8,7
    9,7
    10,8
    ログイン後にコピー

以上が中点ライン生成アルゴリズムの C++ 実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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