2011年10月21日 星期五

97正式 Problem5:兩直線間的關係

Problem5:兩直線間的關係(14%)

2維平面中兩條直線間的關係共有三種:

1. 相交於一點

2. 重疊(無限多交點)

3. 平行(沒有交點)

輸入4個點,分別代表兩條直線。請輸出這兩條直線間的關係。

輸入說明:

每組輸入包含8個以空白隔開的數字x1 y1 x2 y2 x3 y3 x4 y4,分別代表4個點 (x1, y1)(x2, y2)(x3, y3)(x4, y4)。其中第一條直線會通過 (x1, y1)(x2, y2);第二條直線會過通 (x3, y3)(x4, y4)。

輸出說明:

請輸出這兩條直線的關係,如果是相交於一點,請輸出I;如果這兩條線是重疊,請輸出L;如果這兩條線是平行,請輸出N

輸入範例:

5 0 7 6 1 0 2 3

5 0 7 6 3 -6 4 -3

2 0 2 27 1 5 18 5

輸出範例:

N

L

I

3 則留言:

  1. 公式寫好久
    最後用斜率來判斷

    Dim X(4)
    Dim Y(4)
    Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Do While Not EOF(1)
    For I = 1 To 4
    Input #1, X(I), Y(I)
    Next I


    If (X(2) - X(1)) <> 0 Then m1 = (Y(2) - Y(1)) / (X(2) - X(1)) Else m1 = -1
    If (X(4) - X(3)) <> 0 Then m2 = (Y(4) - Y(3)) / (X(4) - X(3)) Else m2 = -1

    If m1 <> m2 Then
    Print #2, "I"
    Else
    If -m1 * X(1) + Y(1) = -m2 * X(3) + Y(3) Then Print #2, "L" Else Print #2, "N"
    End If

    Loop
    Close #2
    Close #1
    End
    End Sub

    回覆刪除
  2. Dim x1, x2, x3, x4, y1, y2, y3, y4
    Dim m1, m2
    Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Do While Not EOF(1)
    Input #1, x1, y1, x2, y2, x3, y3, x4, y4
    If x1 - x2 = 0 Then m1 = y1 - y2 Else m1 = (y1 - y2) / (x1 - x2)
    If x3 - x4 = 0 Then m2 = y3 - y4 Else m2 = (y3 - y4) / (x3 - x4)
    If m1 = m2 Then
    c = x1 / (x2 - x1)
    d = x3 / (x4 - x3)
    If y1 - c * (y2 - y1) = y3 - d * (y4 - y3) Then
    Print #2, "L"
    Else
    Print #2, "N"
    End If
    Else
    Print #2, "I"

    End If
    Loop
    Close
    Close
    End
    End Sub

    回覆刪除
  3. arro好,
    你的程式沒有避掉分母為0的全部可能,
    If m1 = m2 Then
    c = x1 / (x2 - x1)
    如果x2=x1呢。
    柯佑好,(換個名字,重新叫起來,小小怪了一下)。
    程式正確。

    回覆刪除