Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3642 / 13646 ツリー ←次へ | 前へ→

【60942】交点の判定 質問者 09/3/26(木) 0:51 質問[未読]
【60953】Re:交点の判定 n 09/3/26(木) 21:22 発言[未読]
【60954】Re:交点の判定 質問者 09/3/26(木) 23:05 お礼[未読]
【60956】Re:交点の判定 横入り 09/3/27(金) 7:02 発言[未読]
【60957】Re:交点の判定 SS 09/3/27(金) 9:35 発言[未読]
【60991】Re:交点の判定 横入り 09/3/31(火) 23:02 発言[未読]

【60942】交点の判定
質問  質問者  - 09/3/26(木) 0:51 -

引用なし
パスワード
   グラフを作成して、2つの系列の線の交点を算出しようとしています。
2つの線分ABと線分CDが交差するか判定する良い方法はありますか?
お手数ですが、相談にのって下さい。
お願いします。

【60953】Re:交点の判定
発言  n  - 09/3/26(木) 21:22 -

引用なし
パスワード
   グラフの座標ではなく、元データから算出すれば良いのですよね?
>2つの線分ABと線分CDが交差するか判定...
折れ線グラフの場合は、オーソドックスに考えると、y値について
AとCを比較した時の大小比較<>と
BとDを比較した時の大小比較<>で
関係が逆転したら交差するという判定で良いのではないでしょうか。

交点の算出は連立方程式の話なので数学の範疇のような気もしますが、
昔書いた事がありましたので、単純な例として挙げておきます。

Sub test()
  Dim flg As Boolean
  Dim a, b, c, d
  Dim z

  '{x値,y値}
  a = [{1,1}]
  b = [{2,3}]
  c = [{1,2}]
  d = [{2,2}]

  If a(2) > c(2) Then
    If b(2) < d(2) Then
      flg = True
    End If
  ElseIf a(2) < c(2) Then
    If b(2) > d(2) Then
      flg = True
    End If
  End If
  MsgBox "交差は " & flg
  If flg Then
    z = fKOUSA(a(1), a(2), _
          b(1), b(2), _
          c(1), c(2), _
          d(1), d(2))
    MsgBox "交点は x= " & z(1) & " y= " & z(2)
  End If
End Sub

Private Function fKOUSA(ByVal Ax As Double, ByVal Ay As Double, _
            ByVal Bx As Double, ByVal By As Double, _
            ByVal Cx As Double, ByVal Cy As Double, _
            ByVal Dx As Double, ByVal Dy As Double) As Variant
  Dim x As Double
  Dim y As Double
  Dim z(1 To 2) As Double '1=x,2=y
  Dim R1 As Double
  Dim R2 As Double
  Dim S1 As Double
  Dim S2 As Double

  R1 = (By - Ay) / (Bx - Ax)
  R2 = (Dy - Cy) / (Dx - Cx)
  S1 = Ay - (R1 * Ax)
  S2 = Cy - (R2 * Cx)
  x = (S2 - S1) / (R1 - R2)
  y = R1 * x + S1
  z(1) = x
  z(2) = y
  fKOUSA = z
End Function

【60954】Re:交点の判定
お礼  質問者  - 09/3/26(木) 23:05 -

引用なし
パスワード
   ▼n さん:
すいません、冷静に考えれば単純な連立方程式で解けましたね。

【60956】Re:交点の判定
発言  横入り  - 09/3/27(金) 7:02 -

引用なし
パスワード
   横入り失礼します。
▼質問者 さん:
>▼n さん:
>すいません、冷静に考えれば単純な連立方程式で解けましたね。

単純なだなんて、そりゃ失礼な言い方じゃないですか?
あなたはそれすらできなかったわけでしょ?
人の手を煩わせておいて、お礼の言葉ぐらいはあってしかるべきです。

それに、美しいコーディングからも学ぶことは多いはずですよ。

【60957】Re:交点の判定
発言  SS  - 09/3/27(金) 9:35 -

引用なし
パスワード
   ▼横入り さん:

ちょっと気になったので書かせていただきます。
>>すいません、(お手数をお掛けしまして済みません)
>>冷静に考えれば単純な連立方程式で解けましたね。(そんなことも気付かない自分は迂闊でした)
と普通に受け取れますよ。
横入りさん(同一の方かは分かりませんが)の回答は、しばしば攻撃的過ぎるように感じます。私の個人的な感想ですがご考慮いただければ幸いです。

>横入り失礼します。
>▼質問者 さん:
>>▼n さん:
>>すいません、冷静に考えれば単純な連立方程式で解けましたね。
>
>単純なだなんて、そりゃ失礼な言い方じゃないですか?
>あなたはそれすらできなかったわけでしょ?
>人の手を煩わせておいて、お礼の言葉ぐらいはあってしかるべきです。
>
>それに、美しいコーディングからも学ぶことは多いはずですよ。

【60991】Re:交点の判定
発言  横入り  - 09/3/31(火) 23:02 -

引用なし
パスワード
   >横入りさん(同一の方かは分かりませんが)の回答は、しばしば攻撃的過ぎるよう
>に感じます。私の個人的な感想ですがご考慮いただければ幸いです。

あなたの個人的感想を表明されるのは、それはそれで結構なことです。
私は私の感じ方、意見を申し上げるだけです。

3642 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free