이 선물 포장 알고리즘 (yoshihitoyagi!)을 VB6에서 java로 구현하려고합니다. 나는 이것을 제대로했다고 확신하지만, 어떤 이유로 그것이 작동하지 않을 것이다. 돌려 주어지는 배열은 1 요소만을가집니다. 나는 누군가가 한 번 (새로운 눈의 집합)을 들여다 볼 수 있었고, 내가 무언가를 뻔뻔스럽게 놓치고 있는지를 알려주기를 바랬다. 당신이 1과 0의 이유는 그 사이에 어떤 차이를 볼 그래서 경우Gift Wrapping 알고리즘이 제대로 작동하지 않습니다.
Function small(ByVal Current As Integer, ByVal smallest As Integer, ByVal i As Integer) As Boolean
Dim xa, ya, xb, yb, val As Integer
xa = xPoints(smallest) - xPoints(Current)
xb = xPoints(i) - xPoints(Current)
ya = yPoints(smallest) - yPoints(Current)
yb = yPoints(i) - yPoints(Current)
val = xa * yb - xb * ya
If val > 0 Then
small = True
ElseIf val < 0 Then
small = False
Else
If (xa * xb + ya * yb) < 0 Then
small = False
Else
If (xa * xa + ya * ya) > (xb * xb + yb * yb) Then
small = True
Else
small = False
End If
End If
End If
End Function
Sub CreateContours1()
Dim Min, i, num, smallest, Current, contourcount2 As Integer
Dim xPoints2(), yPoints2() As Long
'Find leftmost lowest point
Min = 1
For i = 1 To contourCount
If yPoints(i) = yPoints(Min) Then
If xPoints(i) < xPoints(Min) Then
Min = i
End If
ElseIf yPoints(i) < yPoints(Min) Then
Min = i
End If
Next
Debug.Print "Min: " & Min
Current = Min
num = 1
Do
contourcount2 = contourcount2 + 1
ReDim Preserve xPoints2(contourcount2)
ReDim Preserve yPoints2(contourcount2)
xPoints2(num) = xPoints(Current)
yPoints2(num) = yPoints(Current)
Debug.Print "num: " & num & ", current: " & Current & "(" & xPoints(Current) & ", " & yPoints(Current) & ")"
num = num + 1
smallest = 1
If smallest = Current Then
smallest = 1
End If
For i = 1 To contourCount
If (Current = i) Or (smallest = i) Then
GoTo continue_loop
End If
If small(Current, smallest, i) Then
smallest = i
End If
Next
Current = smallest
continue_loop:
Loop While Current <> Min
End Sub
내 모든 배열이 1부터 시작됩니다
여기 내 코드입니다.
나는 이것이 많은 것을 이해하지만 어떤 도움을 주시면 감사하겠습니다.
고맙습니다 !!!!
tcarvin, contourCount는 전역 적으로 선언됩니다. 각 변수를 명시 적으로 선언했지만 결과를 변경하지 못했습니다. – gberg927
각 변수를 명시 적으로 선언해도 행동을 바꿀 수는 없다는 것을 알았지 만 포함할만한 가치가있는 최상의 방법입니다. – tcarvin
가져 오기, 편집 2 확인 – tcarvin