Τροποποίηση για vb.net

Private Structure POINTAPI
Public X As Long
Public Y As Long
End Structure

Private Function PtInPoly(ByVal Poly() As POINTAPI, _
ByVal Xray As Long, _
ByVal YofRay As Long) As Boolean
Dim X As Long
Dim PolyCount As Long
Dim NumSidesCrossed As Long
Dim LenOfSide As Single
Dim CrossPt As POINTAPI
CrossPt.X = Xray
PolyCount = 1 + UBound(Poly) - LBound(Poly)
For X = LBound(Poly) To UBound(Poly)
If Poly(X).X > Xray Xor Poly((X + 1) Mod PolyCount).X > Xray Then
CrossPt.Y = Y_at_X_Ray(Xray, Poly(X), Poly((X + 1) Mod PolyCount))
If CrossPt.Y > YofRay Then
LenOfSide = PtDist(Poly(X), Poly((X + 1) Mod PolyCount))
If LenOfSide > PtDist(Poly(X), CrossPt) And _
LenOfSide > PtDist(Poly((X + 1) Mod PolyCount), CrossPt) Then
NumSidesCrossed = NumSidesCrossed + 1
End If
End If
End If
Next
If NumSidesCrossed Mod 2 Then PtInPoly = True
End Function

Private Function Y_at_X_Ray(ByVal Xray As Single, _
ByVal p1 As POINTAPI, _
ByVal p2 As POINTAPI) As Single
Dim m As Single
Dim b As Single
m = (p2.Y - p1.Y) / (p2.X - p1.X)
b = (p1.Y * p2.X - p1.X * p2.Y) / (p2.X - p1.X)
Y_at_X_Ray = m * Xray + b
End Function

Private Function PtDist(ByVal p1 As POINTAPI, ByVal p2 As POINTAPI) As Single
PtDist = Math.Sqrt((p2.Y - p1.Y) * (p2.Y - p1.Y) + _
(p2.X - p1.X) * (p2.X - p1.X))
End Function

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim Polygon(3) As POINTAPI
Polygon(1).X = 23.23232 'πρώτο σημείο
Polygon(1).Y = 41.414141
Polygon(2).X = 24.242424 'δεύτερο σημείο
Polygon(2).Y = 42.424242
Polygon(3).X = 25.252525 'τρίτο σημείο
Polygon(3).Y = 39.393939
'το πολύγωνο δεν πρέπει να κλείνει στο πρώτο σημείο. Αυτό γίνεται αυτόματα
If PtInPoly(Polygon, 23.2321, 32.3232322) = False Then
Response.Write("Out of bounds")
Else
Response.Write("inside bounds")
End If


End Sub

Copyright 2010 Collector
Lunax Free Premium Blogger™ template by Introblogger