- PR -

Javaというか、数学というか、算数の質問です・・・

投稿者投稿内容
ボム
ベテラン
会議室デビュー日: 2003/07/25
投稿数: 61
投稿日時: 2003-10-09 15:56
"fillRoundRect"を使って横長のグラフを描画しています。

"getWidthFromValue"という関数を作って渡した値からグラフの幅を算出しています。
算出した幅の長さの長方形を描画しています。
>width = getWidthFromValue(Value);
>fillRoundRect(X, Y, width, Height, arcW, arcH);

"getWidthFromValue"関数はこんな感じです。
int getWidthFromValue(int intVal) {
 int width = 0;
 if(intVal <= 0) {
  return 0;
 }
 if(intVal > 127){
  return 118;
 }
 width = (int)(intVal * ((double)118 / (double)127));
 return width;
}

この中での数式
width = (int)(intVal * ((double)118 / (double)127));

幅 = (int)(値 * ((double)グラフの最大幅 / (double)値の最大値));
です。

長々説明してしまいましたが、
上記の式だと値が0の時は幅も0になってしまいます。
やりたい事は値が0の時の幅が8にしたいのです。
非常にレベルの低い質問ですみません。
教えてください




でくのぼう
大ベテラン
会議室デビュー日: 2003/10/06
投稿数: 162
投稿日時: 2003-10-09 16:03
幅 = (値 * (グラフの最大幅 - 8) / 値の最大値) + 8

こんな感じでいかがでしょう。
ゲタを履かせただけなんですけどね。
ゆう
ベテラン
会議室デビュー日: 2003/06/20
投稿数: 56
投稿日時: 2003-10-09 16:06
こんにちわ。お世話になっております。

getWidthFromValueメソッドの中でintValが0のときに
8を返すようにしてあげればよいのでは??

コード:
  if ( intVal < 0 ) {
    return 0;
  } else  if ( intVal == 0) {
    return 8;
  }

ボム
ベテラン
会議室デビュー日: 2003/07/25
投稿数: 61
投稿日時: 2003-10-09 16:40
お早いお答えありがとうございました。

まずでくのぼう様のお答えですが、
>幅 = (値 * (グラフの最大幅 - 8) / 値の最大値) + 8
ですと、値に0がくると幅は0になってしまいます。

次にゆう様のご意見ですが、
>intValが0のときに8を返すようにしてあげればよいのでは
ですと、
値に3が来た場合幅は2になり
値に2が来た場合幅は1になり
値に1が来た場合幅は0になり
値に0が来た場合幅が8になるといった感じです。
これですと右から左へグラフが縮んでいき、0になると急に8の幅に伸びるといった
動きになってしまいます。


グラフは左から右へ伸びるグラフです、値が0の時にグラフが表示されないので
値が0の時は幅を8にしたいのです。つまり幅8が値0にしたいのです。そこから
右へグラフが伸びていき幅118になったら値は127になるといった感じです。
説明不足で申し訳ありません。

[ メッセージ編集済み 編集者: ボム 編集日時 2003-10-09 16:45 ]
アティ
ベテラン
会議室デビュー日: 2003/08/14
投稿数: 91
お住まい・勤務地: KANAGAWA
投稿日時: 2003-10-09 16:47
どうもです。
>まずでくのぼう様のお答えですが、
>>幅 = (値 * (グラフの最大幅 - 8) / 値の最大値) + 8
>ですと、値に0がくると幅は0になってしまいます。
上の式では、値が0でも8になると思いますけど。

[ メッセージ編集済み 編集者: アティ 編集日時 2003-10-09 16:50 ]
Jun
大ベテラン
会議室デビュー日: 2003/08/25
投稿数: 141
投稿日時: 2003-10-09 17:06
junと申します.やりたいことがよくわからないのですけど
単純な比例計算でよいなら
値×(118-/127+8
では
Jun
大ベテラン
会議室デビュー日: 2003/08/25
投稿数: 141
投稿日時: 2003-10-09 17:07
なにか化けてしまうようです
118から8を引いたものを127で割ったものに値をかけて8を足します
ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2003-10-09 17:07
ども、ほむらです。
ゆう氏のように
コード:
  if(intVal <= 0) { 
  return 0; 
 } 


を書き換えてあげればよいだけではないのですか?
コード:
 if(intVal <= 0) { 
  return 0; 
 } 
 if(intVal > 127){ 
  return 118; 
 } 


この部分はwidthのとる値の最小と最大という風に僕には読めるのですけど。

スキルアップ/キャリアアップ(JOB@IT)