トップページ > 記事閲覧
Segment_Segment_Minlength()
名前:Priest 日時: 2013/08/03 07:43

片方の線分の長さが0になると正常に最短距離を出してくれない様な気がします。 よろしくお願いします。 #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { float xadd, length ; VECTOR LineA1, LineA2, LineB1, LineB2 ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが発生したら直ちに終了 return -1 ; } // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ) ; // 二線分の座標をセット LineA1 = VGet( 0.0f, 0.0f, 0.0f ) ; LineA2 = VGet( 0.0f, 200.0f, 0.0f ) ; LineB1 = VGet( 320.0f, 240.0f, 0.0f ) ; LineB2 = VGet( 320.0f, 240.0f, 0.0f ) ; //LineB2 = VGet( 320.0f, 241.0f, 0.0f ) ; // 座標と加算数の初期化 xadd = 8.0f ; // ウインドウが閉じられるか何かキーが押されるまでループ while( ProcessMessage() == 0 && CheckHitKeyAll() == 0 ) { // 画面をクリア ClearDrawScreen() ; // 線分の片方の終点を移動 LineA2.x += xadd ; if( LineA2.x < 0.0f || LineA2.x > 640.0f ) xadd = -xadd ; // 二線分の最近点どうしの距離を求める length = Segment_Segment_MinLength( LineA1, LineA2, LineB1, LineB2 ) ; // 距離を表示 DrawFormatString( LineA2.x, LineA2.y, GetColor( 255,255,255 ), "length=%f", length); // 片方の線分の描画 DrawLine( LineB1.x, LineB1.y, LineB2.x, LineB2.y, GetColor( 255,255,255 ) ) ; // もう一つの線分を距離が 64 以下だったら色を変えて描画 if( length < 64.0f ) { DrawLine( LineA1.x, LineA1.y, LineA2.x, LineA2.y, GetColor( 255,0,0 ) ) ; } else { DrawLine( LineA1.x, LineA1.y, LineA2.x, LineA2.y, GetColor( 0,255,0 ) ) ; } // 裏画面の内容を表画面に反映させる ScreenFlip() ; } // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }
メンテ

Page: 1 |

Re: Segment_Segment_Minlength() ( No.1 )
名前:管理人 日時:2013/08/03 17:25

Segment_Segment_MinLength に渡す線分の始点座標と終点座標が一致している場合に 正常な値が返らないようになっていました 修正版をアップしましたのでよろしければお試しください m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_DevCppTest.exe // Dev-C++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用 http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
メンテ
Re: Segment_Segment_Minlength() ( No.2 )
名前:Priest(解決) 日時:2013/08/04 10:32

修正を確認しました。 ありがとうございました。
メンテ
Re: Segment_Segment_Minlength() ( No.3 )
名前:管理人 日時:2013/08/08 23:08

すみません、Segment_Segment_MinLength の修正の際に別のバグを埋め込んでしまっていました 再度修正しましたので、お手数で申し訳ありませんがこちらをお使いください m(_ _;m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_DevCppTest.exe // Dev-C++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用 http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存