const int による定義についての質問

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
C.P.P

const int による定義についての質問

#1

投稿記事 by C.P.P » 18年前

こんにちは☆いつもお世話になっております♪

今回も質問なんですが、よろしくお願いします(^_^)

以前こちらのサイトでDXらいぶらりによるマウス操作の質問をさせていただきました。
その際に、サンプルプログラムとしていただいたプログラムの中に、

//家を囲む一片の半分の長さ
const int rangeX = home->scale * 10/2, rangeY = home->scale * 5/2;

という行があります。これは、家をDrawLine関数やDrawBox関数を用いて描いた家の絵をマウスによって移動するために、マウスのドラッグ位置をこの範囲の指定によって得るものです。

つまり、
int rangeX = home->scale*10/2, rangeY = home->scale*11/2;
if(mouseinfo->pos.x >= home->pos.x - rangeX && mouseInfo->pos.x <=pos.x + rangeX
&& mouseInfo->pos.y >= home->pos.y - rangeY && mouseInfo->pos.y <= pos.y + rangeY)
{
home->is_dragging = TRUE;
home->drag_offset.x = mouseInfo->pos.x - home->pos.x;
home->drag_offset.y = mouseInfo->pos.y - home->pos.y;
}
(これは範囲内だった場合、ドラッグ開始というプログラムです。)

このように使うのですが、このrangeXとrangeYの定義の仕方がよく分かりません・・・
rangeX = home->scale * 10/2 とする事により、半分の長さの定義になるらしいのですが、なぜhome->scale(これは家の大きさであり、初期値は5)に10/2をかけるのでしょうか?

初心者な質問で申し訳ございません・・・
よろしくお願いいたしますm(>o<)m

またその際いただいたサンプルプログラムを添付させていただきます・・・

drag_test1の方がそうです。
お願いいたします☆

Justy

Re:const int による定義についての質問

#2

投稿記事 by Justy » 18年前

>このrangeXとrangeYの定義の仕方がよく分かりません・
 えーとですね。

 home->scale*10/2

 の式における home->scaleはいいですよね?
 10というのは Home_Draw()を見てもらえるとわかると思うのですが、
DrawTriangle()で、xの座標に

home->disp_pos.x+home->scale*10

 というのがあります。
 ここで 10という定数が出てきています。
 この座標はトライアングルの右端を表しており、この家を構成する座標の
最も右となります。
 逆に左端は 0なので、家の横幅は 10 - 0 で、10。
 なので、半分の 5にすれば丁度家の横幅の半分の長さとなります。


 同様に height方向も2つ目の DrawBox()で 11を掛けている座標があります。
 そこが家を構成する座標の最も下の座標になり、同様に 11を半分にすれば
高さの半分の長さとなります。

C.P.P

マウスによる描画の編集

#3

投稿記事 by C.P.P » 18年前

返信ありがとうございます☆
大変分かりやすく、かなり助かりました。ありがとうございます♪

理解してみればかなり簡単すぎる質問で申し訳ございません・・・
これからやっと、前へ進めそうです☆

あの、申し訳ございませんが、昨日プログラムを組んでまして、もう一つ分からないところがありましたんでもしよろしかったら教えてください・・・

DrawLine,DrawBoxによって、書いた家の絵があります。
その家の端っこをマウスによってつかんで、伸ばしたい(大きさを変える)のですが、何かいい方法はございませんか?

今考えてやろうとしましたのは、
DrawBoxの描画関数の座標定義の際に、
DrawBox
(  home->disp_pos.x+home->scale*home->start_pos.x,
    home->disp_pos.y+home->scale*home->start_pos.y,
home->disp_pos.x+home->scale*home->end_pos.x,
home->disp_pos.y+home->scale*home->end_pos.y,
home->is_dragging? Yellow: White, TRUE
);
という感じで,start_pos,end_pos(家構造体の中に入れ2次元ベクトルで与えたもの)による座標で表し、end_posをマウスによって移動すればよいと考えているのですが・・・
なかなか上手くいきません。。。
(端っこだけを掴むという範囲指定も分かりません・・・)

なにかやり方が間違っている、もしくはこの方法以外になにかいい方法を知っている方がいらっしゃいましたら教えてください。お願いいたしますm(>o<)m

Justy

Re:マウスによる描画の編集

#4

投稿記事 by Justy » 18年前

その家の端っこをマウスによってつかんで、伸ばしたい(大きさを変える)のですが、
何かいい方法はございませんか?
 start_pos/end_posが左上・右下のことを言っているのであれば
考え方としては間違っていません。
 左上と右下の座標を出して、その2点を通る矩形を考えます。

 その矩形の辺の周辺でマウスが押されたら、「移動」の為のドラッグではなく
「拡大縮小」の為のドラッグの処理を行います。

 ここで注意が必要なのは、どこを掴んだかによって処理が分かれます。
 上の辺を掴んだら下の辺はそのままに上の辺が移動します。
 右の辺を掴んだら左の辺はそのままに右の辺が移動します。
 下・左も同様です。

 この4つの処理の複合もあります。
 左上・左下・右上・右下の位置からドラッグした場合ですね。
 
 
端っこだけを掴むという範囲指定も分かりません
 矩形の辺や角にマウスが載っているいるかどうかの判定ですか?
 右上などの角であれば単純にその点からの一定の半径以内にあるかで判定できます。
 
 辺上にあるかの判定は、各辺毎に処理を行う必要があります。
 辺と考えると長さはあっても厚みはないですが、(掴みやすいように)あえて厚みのある
細長い矩形と考えれば点と矩形の判定になります。
 これを4辺で行えばOKです。


 まぁ、ゆっくり考えてみて下さい。

C.P.P

Re:マウスによる描画の編集

#5

投稿記事 by C.P.P » 18年前

返信ありがとうございます☆

的確なアドバイスありがとうございますm(^_^)m
なんとかいい所までは出来て来ましたんで頑張ってみます!

DXライブラリって楽しいですね☆
最初は全く何も知らなかったところから、やればやるだけ出来るようになりますし☆

また、質問させていただくことがあると思いますが、その際にはよろしくお願いいたします!
本当にありがとうございました☆

閉鎖

“C言語何でも質問掲示板” へ戻る