tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトル温度の等高線
記事No11281
投稿日: 2008/01/30(Wed) 10:11
投稿者BB
VB6.0で温度の等高線のようなものを書きたいと思っています。
3600×4800のFormで、式は
T1 = 5 * Sin(pai * X / 2400) * Sin(pai * Y / 2400) + 25

この式で20〜30℃までを色分けしたいのですが思ったようにうまくはいきません。
もし、いい案などありましたら、教えていただきたいと思います。
よろしくお願いします。
一応、書いたものを下に張ります。

Private Sub Form_Click()

Dim pai As Single
Dim i As Single
Static T1 As Single

Static X As Single
Static Y As Single
Static T As Single




DrawWidth = 3


Line (2400, -1800)-(2400, 1800), QBColor(0)
Line (2400, 1800)-(-2400, 1800), QBColor(0)

DrawWidth = 1
Line (2400, -1800)-(-2400, -1800), QBColor(0)
Line (-2400, -1800)-(-2400, 1800), QBColor(0)


Line (-2400, 0)-(2400, 0), QBColor(5)
Line (0, 1800)-(0, -1800), QBColor(5)

pai = 3.14159
T1 = 5 * Sin(pai * X / 2400) * Sin(pai * Y / 2400) + 25

If T1 > 28 And T1 <= 28 Then
PSet (X, Y), RGB(255, 0, 0)
If T1 > 26 And T1 <= 28 Then
PSet (X, Y), RGB(255, 200, 0)
If T1 > 24 And T1 <= 26 Then
PSet (X, Y), RGB(255, 255, 0)
If T1 > 22 And T1 <= 24 Then
PSet (X, Y), RGB(0, 255, 0)
If T1 >= 20 And T1 <= 22 Then
PSet (X, Y), RGB(0, 0, 255)

End If
End If
End If
End If
End If


End Sub

[ツリー表示へ]
タイトルRe: 温度の等高線
記事No11282
投稿日: 2008/01/30(Wed) 10:45
投稿者大吉末吉
> この式で20〜30℃までを色分けしたいのですが思ったようにうまくはいきません。
>  If T1 > 28 And T1 <= 28 Then
>  If T1 > 26 And T1 <= 28 Then
>  If T1 > 24 And T1 <= 26 Then
>  If T1 > 22 And T1 <= 24 Then
>  If T1 >= 20 And T1 <= 22 Then
>
>  End If
>  End If
>  End If
>  End If
>  End If

IFが入れ子(IF〜End Ifの間に、別のIF〜End Ifがある)になってますね。
これだと、1つ目のIF条件を満たす時(つまりT1=28の時)しか、
2つ目のIFをチェックしません。(でT1=28ですので以降の条件は、成り立ちません)

条件を並べる時は、入れ子にしないで、普通に並べてください。
#又は、Else(やElseIf)を使うか・・・

[ツリー表示へ]
タイトルRe^2: 温度の等高線
記事No11284
投稿日: 2008/01/30(Wed) 10:55
投稿者
If T1 > 28 And T1 <= 28 Then
  If T1 > 26 And T1 <= 28 Then
    If T1 > 24 And T1 <= 26 Then
      If T1 > 22 And T1 <= 24 Then
        If T1 >= 20 And T1 <= 22 Then
        End If
      End If
    End If
  End If
End If

入れ子になってますね。
並び替えればこうなりますょ
ELSEIF文 使うかSELECT文使うかですね
SELECT CASE T1
  CASE Is < 20
  Case Is <= 22
  CASE Is <= 24
  CASE Is <= 26
  CASE Is <= 28
End Select
ですかね

[ツリー表示へ]
タイトルRe: 温度の等高線
記事No11286
投稿日: 2008/01/30(Wed) 11:10
投稿者y4yama
> T1 = 5 * Sin(pai * X / 2400) * Sin(pai * Y / 2400) + 25
X,Yの変化でT1が決められるのですが、貴殿が意図するT1の分布は座標によるものなのか
何なのかが理解できないです(*A)

> この式で20〜30℃までを色分けしたいのですが思ったようにうまくはいきません。
X,Yは 0だけ?ですか?
For で回さないと、Psetは1回しかされませんよネ?

試しに、
For X = -1000 To 1000
For Y = -1000 To 1000
としてみたら、それらしい色分けにはなったのですが、・・・

[ツリー表示へ]
タイトルRe^2: 温度の等高線
記事No11287
投稿日: 2008/01/30(Wed) 12:28
投稿者BB
大吉末吉さん、來さん、y4yamaさん返信ありがとうございます。
大吉末吉さん、來さんのアドバイスどおり、Selectでやり直しています。

y4yamaさんに質問なのですが、
> For X = -1000 To 1000
>  For Y = -1000 To 1000

XかYだけなら、惜しいとこまでいったんですが、
上のように
一気に二つのForを使うのは可能なのですか?
Nextを最後に2つつけると、エラーになってしまうのですが・・・。

[ツリー表示へ]
タイトルRe^3: 温度の等高線
記事No11288
投稿日: 2008/01/30(Wed) 12:41
投稿者y4yama
> 一気に二つのForを使うのは可能なのですか?
> Nextを最後に2つつけると、エラーになってしまうのですが・・・。

VBの基本です。(こちらのサンプルでもForの2重ループは、見つかると思いますヨ )
がんばってください

[ツリー表示へ]
タイトルRe^4: 温度の等高線
記事No11291
投稿日: 2008/01/30(Wed) 13:02
投稿者BB
> VBの基本です。(こちらのサンプルでもForの2重ループは、見つかると思いますヨ )
> がんばってください

y4yama
ありがとうございます!!
無事できました!!!
Nextの順番を変えるんですね!
勉強になりました。
みなさまありがとうございました。

[ツリー表示へ]