トップページ > 過去ログ > 記事閲覧
拡大後の座標
名前:koi 日時: 2011/04/21 19:54

はじめまして DrawRotaGraph2をつかって描画をしているのですが 拡大後の画像の左上や右下の画面上の座標を知るためにはどのようにしたらよいでしょうか。

Page: 1 |

Re: 拡大後の座標 ( No.1 )
名前:いっち 日時:2011/04/21 21:10

> 拡大後の画像の左上や右下の画面上の座標を知るためにはどのようにしたらよいでしょうか。 DXライブラリにその様な機能は無いので、地道に座標を計算して求めるのが良いと思います。 読み込んだ画像のサイズは GetGraphSize で得られます。
Re: 拡大後の座標 ( No.2 )
名前:koi 日時:2011/04/22 15:27

やはり無理ですか… どうもありがとうございます
Re: 拡大後の座標 ( No.3 )
名前:管理人 日時:2011/05/03 19:54

DXライブラリの機能として追加する予定はありませんが、 サンプルプログラムとして DrawRotaGraph2 の拡大・回転後の頂点座標を得るための関数を作ってみましたので、 よろしければサンプルプログラムにある関数 GetDrawRotaGraph2Position を使ってみてください // 画像を DrawRotaGraph2 で回転させながら、その輪郭に GetDrawRotaGraph2Position で取得した // 座標を使って線を描画するサンプルプログラム #include "DxLib.h" #include <math.h> // グラフィックの回転描画の各頂点の座標を得る void GetDrawRotaGraph2Position( int x, int y, int cx, int cy, double ExtRate, double Angle, int GrHandle, double *LeftTopX, double *LeftTopY, double *RightTopX, double *RightTopY, double *LeftBottomX, double *LeftBottomY, double *RightBottomX, double *RightBottomY ) { int w, h ; double hw, hh ; int tx, ty ; int i ; double Sin, Cos ; double xb, Lx, Ly ; double px[4], py[4] ; double dcx, dcy ; double bcx, bcy ; Sin = sin( Angle ) ; Cos = cos( Angle ) ; GetGraphSize( GrHandle, &w,&h ) ; hw = ( double )w / 2.0 ; hh = ( double )h / 2.0 ; bcx = ( -cx + hw ) * ExtRate ; bcy = ( -cy + hh ) * ExtRate ; dcx = bcx * Cos - bcy * Sin ; dcy = bcx * Sin + bcy * Cos ; Lx = x + dcx ; Ly = y + dcy ; px[ 0 ] = - hw ; py[ 0 ] = - hh ; px[ 1 ] = w - hw ; py[ 1 ] = - hh ; px[ 2 ] = - hw ; py[ 2 ] = h - hh ; px[ 3 ] = w - hw ; py[ 3 ] = h - hh ; for( i = 0 ; i < 4 ; i ++ ) { xb = px[ i ] ; px[ i ] = ( xb * Cos - py[ i ] * Sin ) * ExtRate + Lx ; py[ i ] = ( xb * Sin + py[ i ] * Cos ) * ExtRate + Ly ; } if( LeftTopX ) *LeftTopX = px[ 0 ] ; if( LeftTopY ) *LeftTopY = py[ 0 ] ; if( RightTopX ) *RightTopX = px[ 1 ] ; if( RightTopY ) *RightTopY = py[ 1 ] ; if( LeftBottomX ) *LeftBottomX = px[ 2 ] ; if( LeftBottomY ) *LeftBottomY = py[ 2 ] ; if( RightBottomX ) *RightBottomX = px[ 3 ] ; if( RightBottomY ) *RightBottomY = py[ 3 ] ; } int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int handle ; double angle ; double ltx, lty, rtx, rty, lbx, lby, rbx, rby ; // ウインドウモードで起動 ChangeWindowMode( TRUE ); // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1; // 画像の読み込み handle = LoadGraph( "Test1.bmp" ); // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ); // メインループ(何かキーが押されたらループを抜ける) angle = 0.0 ; while( ProcessMessage() == 0 ) { // 回転値を更新 angle += 0.02f ; // 画面のクリア ClearDrawScreen(); // 回転座標を取得 GetDrawRotaGraph2Position( 320, 240, 40, 100, 1.5f, angle, handle, &ltx, &lty, &rtx, &rty, &lbx, &lby, &rbx, &rby ) ; // 画像の描画 DrawRotaGraph2( 320, 240, 40, 100, 1.5f, angle, handle, TRUE ) ; // 画像の上に線を描画 DrawLine( ltx, lty, rtx, rty, GetColor( 255,0,0 ), 2 ) ; DrawLine( rtx, rty, rbx, rby, GetColor( 0,255,0 ), 2 ) ; DrawLine( rbx, rby, lbx, lby, GetColor( 0,0,255 ), 2 ) ; DrawLine( lbx, lby, ltx, lty, GetColor( 255,255,0 ), 2 ) ; // 裏画面の内容を表画面に反映 ScreenFlip(); } // DXライブラリの後始末 DxLib_End(); // ソフトの終了 return 0; }
Re: 拡大後の座標 ( No.4 )
名前:koi 日時:2011/08/14 18:07

管理人さんどうもありがとうございます つかってみます。

Page: 1 |