「Android stdio」Dxライブラリで線分を回転させる

線分の回転ということで、さっそくプログラムの内容をみてみましょう!

以下のプログラムはengine.hというヘッダーファイルです。

線分の構造体を記述しており、コンストラクタとrotation関数があります。

#include "DxLib.h"
#include <cmath>

using namespace std;

struct Line
{
   
    double x0; //始点のx座標
    double y0; //始点のy座標
    double x1; //終点のx座標
    double y1; //終点のy座標

    Line(double _x0, double _y0, double _x1, double _y1) //コンストラクタ
    {
        x0 = _x0;
        y0 = _y0;
        x1 = _x1;
        y1 = _y1;
    }

    void rotation(double theta, int a)
    {

        if(a == CENTER) { //線分の中心を中心に回転
            Vector2D center_point = center();
            double x = x0 - center().x;
            double y = y0 - center().y;
            x0 = (x * cos(theta * M_PI / 180) - y * sin(theta * M_PI / 180)) + center_point.x;
            y0 = (x * sin(theta * M_PI / 180) + y * cos(theta * M_PI / 180)) + center_point.y;

            x1 = (x * cos(M_PI + theta * M_PI / 180) - y * sin(M_PI + theta * M_PI / 180)) + center_point.x;
            y1 = (x * sin(M_PI + theta * M_PI / 180) + y * cos(M_PI + theta * M_PI / 180)) + center_point.y;
        }
        else if(a == START) { //線分の始点を中心に回転
            double x = x1 - x0;
            double y = y1 - y0;

            x1 = (x * cos(theta * M_PI / 180) - y * sin(theta * M_PI / 180)) + x0;
            y1 = (x * sin(theta * M_PI / 180) + y * cos(theta * M_PI / 180)) + y0;
        }

    }

};

これをインクルードして以下のプログラムを実行!

#include "DxLib.h"
#include "engine.h"

// プログラムは android_main から始まります

int android_main( void )
{
    if( DxLib_Init() == -1 )		// DXライブラリ初期化処理
    {
        return -1 ;			// エラーが起きたら直ちに終了
    }

    SetGraphMode(1080, 2220, 32); //1080×2220にサイズ変更

    int light_b = GetColor(0, 255, 255);

    Line line1 = Line(300, 300, 500, 500);
    Line line2 = Line(500, 1000, 600, 1100);

    while(ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen()==0)
    {
        DrawLine(line1.x0, line1.y0, line1.x1, line1.y1, light_b, TRUE);
        line1.rotation(1, CENTER);

        DrawLine(line2.x0, line2.y0, line2.x1, line2.y1, light_b, TRUE);
        line2.rotation(1, START);
    }

    /*
    DrawLine(0, 0, 1079, 0, light_b, TRUE);
    DrawLine(1079, 0, 1079, 2219, light_b, TRUE);
    DrawLine(1079, 2219, 0, 2219, light_b, TRUE);
    DrawLine(0, 2219, 0, 0, light_b, TRUE);
    */

    WaitKey() ;				// キー入力待ち

    DxLib_End() ;				// DXライブラリ使用の終了処理

    return 0 ;					// ソフトの終了
}

このような実行結果になります。

上の線分が線分の中心で回転させたもので、下の線分が始点を中心に回転させたものになります!

今回は以上になります。

ではまた。

コメント

タイトルとURLをコピーしました