件名の通りなんですが現在
Scaling(RECT *prect, float mx, float my); //引数(prect 矩形, mx X倍率, my Y倍率)
上記のような関数があってこれに例えば
RECT rect = { 100, 100, 150, 150 };
Scaling(&rect, 0.5f, 0.5f);
こういう指定をすると矩形を縮小して表示されます。
この時に矩形の中心を基準に縮小されます。
これを任意の座標を指定できるようにして実現したいです。
要するに大きさが変わったrectの値をどう弄れば
これを実現できるのかお聞きしたいです。
※ちなみにScaling()は内部が弄れないライブラリ側の関数なので
戻ってきたrectを弄って実現したいです。
宜しくお願いします。
矩形を基準点を指定して拡大・縮小したい
Re: 矩形を基準点を指定して拡大・縮小したい
なんのライブラリを使っているのかを教えてください。
また、ソースコード全体を上げてくれると助かります。
また、ソースコード全体を上げてくれると助かります。
デバッグは投げ捨てるものではない。
今までの質問でこれは学んだこと。
質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。
仕様書の大切さを改めて思い知った…。
今までの質問でこれは学んだこと。
質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。
仕様書の大切さを改めて思い知った…。
Re: 矩形を基準点を指定して拡大・縮小したい
ご返信ありがとうございます。
ライブラリ自体は有名なものではなく他人が作った無名のものを使用してるのでよくわかりません。
それからコードですが大きさを設定している部分以外はまったく関係のない部分ばかりで
関係する部分は以下になります。
RECT rect = { 100, 100, 200, 200 };
Scaling(&rect, 2.f, 2.f);
//この後は変換後の値を表示するだけの処理(printfでもなんでもいい)
Scaling()関数自体も内部で
設定された倍率に合わせてright, bottomを変更し
その後、矩形の中心が基準点になったかのように
left,top,right,bottomを修正しているだけだと思います。
ライブラリ自体は有名なものではなく他人が作った無名のものを使用してるのでよくわかりません。
それからコードですが大きさを設定している部分以外はまったく関係のない部分ばかりで
関係する部分は以下になります。
RECT rect = { 100, 100, 200, 200 };
Scaling(&rect, 2.f, 2.f);
//この後は変換後の値を表示するだけの処理(printfでもなんでもいい)
Scaling()関数自体も内部で
設定された倍率に合わせてright, bottomを変更し
その後、矩形の中心が基準点になったかのように
left,top,right,bottomを修正しているだけだと思います。
Re: 矩形を基準点を指定して拡大・縮小したい
自分でもよくわからないライブラリを使っているわけですか…。
デバッグは投げ捨てるものではない。
今までの質問でこれは学んだこと。
質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。
仕様書の大切さを改めて思い知った…。
今までの質問でこれは学んだこと。
質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。
仕様書の大切さを改めて思い知った…。
Re: 矩形を基準点を指定して拡大・縮小したい
ではライブラリの機能ではなくてscaling関数は
前述した内容(スケーリング後に中心を基準にしたように座標を移動する)としてください。
仮にそうだったとして変更後のrectの値を弄って今回の件を実現できるでしょうか?質問点はそこです。
前述した内容(スケーリング後に中心を基準にしたように座標を移動する)としてください。
仮にそうだったとして変更後のrectの値を弄って今回の件を実現できるでしょうか?質問点はそこです。
Re: 矩形を基準点を指定して拡大・縮小したい
こういう時普通は使いたい基準点が計算で使用される基準点になるように平行移動させてから計算するような気がするのですが、
変更前のrectの値は弄ってはいけないのですか?
【追記】
変更前のrectを平行移動させても「矩形の中心」が基準になってしまうので、意味がなさそうですね。
無理にScaling関数を使わず、拡大・縮小後の各頂点の座標を自分で計算するほうが良さそうだと思います。
【さらに追記】
それでもScaling関数を使いたいという縛りプレイの質問ですよね。
考えてみます。
変更前のrectの値は弄ってはいけないのですか?
【追記】
変更前のrectを平行移動させても「矩形の中心」が基準になってしまうので、意味がなさそうですね。
無理にScaling関数を使わず、拡大・縮小後の各頂点の座標を自分で計算するほうが良さそうだと思います。
【さらに追記】
それでもScaling関数を使いたいという縛りプレイの質問ですよね。
考えてみます。
最後に編集したユーザー みけCAT on 2017年3月29日(水) 21:03 [ 編集 1 回目 ]
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 矩形を基準点を指定して拡大・縮小したい
みけCATさんありがとうございます。
つまり最初にrectの値を弄って平行移動させてから
倍率に合わせてスケーリングすれば実現できるという事でしょうか?
つまり最初にrectの値を弄って平行移動させてから
倍率に合わせてスケーリングすれば実現できるという事でしょうか?
Re: 矩形を基準点を指定して拡大・縮小したい
いいえ。mela さんが書きました:つまり最初にrectの値を弄って平行移動させてから
倍率に合わせてスケーリングすれば実現できるという事でしょうか?
例えば1頂点だけScalingと関係なく指定した基準点を中心とした縮小の計算をし、
Scalingの結果の矩形のその頂点に対応する頂点が縮小の計算の結果に重なるようにScalingの結果を平行移動させる、という方法を思いつきました。
(だったらわざわざScalingなんか使わずに2頂点(左上と右下?)の計算をしちゃえばいいような気がしますが)
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 矩形を基準点を指定して拡大・縮小したい
みけCATさんへ
要するに平行移動させてその後自力でスケーリングした方が簡単だという事でしょうか?
一旦、Scaling関数に通して中心基準で変換された後、改めて指定座標を基準点にした場合の座標に戻すというのは
かえってややこしい処理になるという事ですかね。
要するに平行移動させてその後自力でスケーリングした方が簡単だという事でしょうか?
一旦、Scaling関数に通して中心基準で変換された後、改めて指定座標を基準点にした場合の座標に戻すというのは
かえってややこしい処理になるという事ですかね。
Re: 矩形を基準点を指定して拡大・縮小したい
自分の理解が正しければ、そのようになりそうですね。 ただし、mela さんが書きました:要するに平行移動させてその後自力でスケーリングした方が簡単だという事でしょうか?
O : 原点
A : 基準点
B : 縮小する点
k : 縮小の倍率
とします。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 矩形を基準点を指定して拡大・縮小したい
みけCATさんへ
ありがとうございます。
図まで用意してくださって。
回転がなくスケーリングだけなので
自分でスケーリング処理を行ってみます。
ありがとうございました。
ありがとうございます。
図まで用意してくださって。
回転がなくスケーリングだけなので
自分でスケーリング処理を行ってみます。
ありがとうございました。