トップページ > 記事閲覧
DrawRotaGraph等の中身について
名前:へけぽん 日時: 2015/12/10 16:55

好奇心から改造希望の方へ と書いてあるファイルをDLしてDXライブラリのソースを見てみました ほとんど意味が分からなかったのですけれども 描画関係の関数を見ていくと、角度や拡大率が変化しているものは どれも最終的にDrawModiGraph(?)が使われているように見えました 気になったのは2つで、 まずDrawRotaGraph3の中ではDrawRotaGraph3Fを呼んでいるようなので ひょっとしてDrawRotaGraphよりもDrawRotaGraph3Fの方が高速なのか?ということです また、それらの関数はModiGraphの引数にあたる四隅の座標x1,y1〜x4,y4を計算しているように見えました もしそうであれば、このx1,y1〜x4,y4を呼び出すことは出来るのでしょうか? 是非教えていただきたいのですが
メンテ

Page: 1 |

Re: DrawRotaGraph等の中身について ( No.1 )
名前:管理人 日時:2015/12/11 00:26

> ひょっとしてDrawRotaGraphよりもDrawRotaGraph3Fの方が高速なのか?ということです DrawRotaGraph より DrawRotaGraph3F の方が低速です DrawRotaGraph3F は DrawRotaGraph より便利なぶん、計算回数が多いのが原因です > また、それらの関数はModiGraphの引数にあたる四隅の座標x1,y1〜x4,y4を計算しているように見えました > もしそうであれば、このx1,y1〜x4,y4を呼び出すことは出来るのでしょうか? 「このx1,y1〜x4,y4を呼び出す」とはどういうことでしょうか? 「回転の計算結果の座標 x1,y1〜x4,y4 の値を取得することができるか?」というご質問でしょうか?
メンテ
Re: DrawRotaGraph等の中身について ( No.2 )
名前:へけぽん 日時:2015/12/11 06:36

>「回転の計算結果の座標 x1,y1〜x4,y4 の値を取得することができるか?」というご質問でしょうか? そうです 拡大率と角度から三角関数を使って四隅の座標を計算し、 その4つの座標をModiGraphの引数に指定しているように見えたので この時の計算結果である四隅の座標が取得出来れば 便利だなーと思ったもので
メンテ
Re: DrawRotaGraph等の中身について ( No.3 )
名前:管理人 日時:2015/12/12 12:29

現状では4つの描画座標を取得する関数はありませんが、DxGraphics.cpp の中の DrawRotaGraph3F 関数の ソースを利用すれば簡単に座標を取得する関数を自作することができます > この時の計算結果である四隅の座標が取得出来れば > 便利だなーと思ったもので 描画関数は沢山あるので座標を取得する関数を追加するのは難しいですが、 具体的にはどのような用途がありますでしょうか?
メンテ
Re: DrawRotaGraph等の中身について ( No.4 )
名前:へけぽん 日時:2015/12/12 15:00

DrawRotaGraph2や3は回転の中心座標を指定できますけれど cx,cyは言うなれば「画像を表示する時の基準位置」みたいなもので その基準だけを変更したい場合に一手間必要な場合があります int x=160;  int y=120; int cx=0;   int cy=0; DrawRotaGraph3(x,y,cx,cy… これで画像の左上が画面の(160,120)に来る、つまり「画像は左上を基準にして表示中」とも言える たとえば画像の大きさが横64縦48だったとして 「今後は画像の下端中央を基準とするよう変更したい」という時に cx=32;cy=48 と変更して先ほどのDrawRotaGraph3(x,y,cx,cy… に繋げても 角度が0度なら画像がx方向に-32、y方向に-48動いたように見えます 角度が90度なら画像がx方向に96、y方向に-32動いたように見えます (ともに拡大率が縦横100%だった場合です) この見た目のおかしさを解消するためにx,yには補正が必要なので 今は拡大率と角度、三角関数を利用して相応しい値を算出してますが 「前回表示した時の4隅の座標」がわかっていれば超簡単な計算で出来たり、 場合によっては計算そのものが必要無かったりします なので 「ポインタを渡しておけばDrawRotaGraph系で描画した後にはその変数に四隅の座標が入っている」 ということができれば理想なんですが… 自前の計算式だと微妙にズレる時があったので、それもあって気になっていたのですが 変数をint型からfloat型に変えてみたら違和感が無くなりましたので 今はスレッドを立てた時ほど気にしていません、すみません
メンテ
Re: DrawRotaGraph等の中身について ( No.5 )
名前:管理人 日時:2015/12/13 02:53

> 「ポインタを渡しておけばDrawRotaGraph系で描画した後にはその変数に四隅の座標が入っている」 すべての関数に描画座標を取得する機能を用意するのは難しいですし 逆に一部の描画関数にだけ座標を取得する機能があるのも不自然なので 現状はへけぽんさんも問題なく処理できているとのことですので機能の実装は保留とさせてください・・・ m(_ _;m
メンテ
Re: DrawRotaGraph等の中身について ( No.6 )
名前:へけぽん 日時:2015/12/21 12:58

今更すみません、 仮にこの設定(座標、画像のサイズ、回転の中心座標、拡大率、角度)で表示したら四隅の座標がどこに来るのかを返す関数、というものを追加していただければありがたいです。 GetCoordinatesRotaGraph(int x, int y,int Width, int Height,int cx, int cy, double ExtRateX, double ExtRateY,double Angle, int *X1Buf , int *Y1Buf, int *X2Buf , int *Y2Buf, int *X3Buf , int *Y3Buf, int *X4Buf , int *Y4Buf) やはり自作だと公式のRotaGraph系の計算結果と違う結果になる場合があるようで、時々ズレることがまだありました。お願いしますm(_ _;m
メンテ
Re: DrawRotaGraph等の中身について ( No.7 )
名前:管理人 日時:2015/12/27 21:27

ご返信が遅くなり申し訳ありません > 仮にこの設定(座標、画像のサイズ、回転の中心座標、拡大率、角度)で表示したら四隅の座標がどこに来るのかを返す関数、というものを追加していただければありがたいです。 うーん、DrawRotaGraph3 だけ描画座標を取得できる関数がある、というのは不自然なので ちょっとその関数の追加は難しいです・・・ > やはり自作だと公式のRotaGraph系の計算結果と違う結果になる場合があるようで、時々ズレることがまだありました 同じ計算をしていれば同じ結果が得られると思うのですが、どのくらいずれてしまうのでしょうか? あと、へけぽんさんは最終的には DrawModiGraph で描画されているのですよね? それでしたら仮に DrawRotaGraph などの関数と描画位置が数ピクセルずれても問題ないと思うのですが・・・
メンテ
Re: DrawRotaGraph等の中身について ( No.8 )
名前:へけぽん(解決) 日時:2015/12/28 00:10

>へけぽんさんは最終的には DrawModiGraph で描画されているのですよね? いえ、普通にDrawRotaGraphの方を使っていました これが間違いでした たぶん、計算手順の影響なのでしょうが ・基準位置を画像の中心から上端中央に変更 ・今度は上端中央から画像の中心に変更 というようなことを繰り返した時に、画像が1ピクセルずつ一定方向に移動してしまったりしたので 自作の計算式はどこか違ってるのだと思います しかし管理人様がおっしゃる通りRotaGraphを使わずに 自作の関数で座標を決定して常にModiGraphを使うようにすれば回避できる問題だったようです ようするに微妙に違う結果がでる計算式(公式のものと自作のもの)を混ぜて使ってたからいけなかったわけで 座標を調べたり決定したりする関数を全部自作のものでやればズレは生じなくなりました 普段はRotaGraph、自由変形の時にModiGraphという固定観念にすっかりとらわれていたようです ありがとうございました
メンテ

Page: 1 |

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

   クッキー保存