Advertisement
Farliam

Untitled

Sep 19th, 2020 (edited)
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VB.NET 4.14 KB | None | 0 0
  1.     Private Function GetQuadrant(ByVal t1 As Tuple(Of Double, Double, Double, Double),
  2.                                  ByVal t2 As Tuple(Of Double, Double, Double, Double)) As List(Of Tuple(Of Double, Double, Double, Double))
  3.  
  4.         Dim pixelMove As Integer = 1 'Um wieviel Pixel das Bilderweitert wird.
  5.         Dim prec As Double = 0.00000000005 'Genauigkeit
  6.  
  7.         'Zuerst rechnen wir den xmin,xmax Step aus
  8.         Dim curXmin As Double = t2.Item1
  9.         Dim curXmax As Double = t2.Item2
  10.         Dim curXminDiff As Double = GetAbsolute(t1.Item1, t2.Item1) / Bildgröße.Width
  11.         Dim curXmaxDiff As Double = GetAbsolute(t1.Item2, t2.Item2) / Bildgröße.Width
  12.         Dim curXminStep As Double
  13.         Dim curXmaxStep As Double
  14.         Dim countx As Integer
  15.         Dim county As Integer
  16.         Dim xminStep, xmaxStep As New List(Of Double)
  17.  
  18.         Do While True
  19.             curXminStep += (curXminDiff * pixelMove)
  20.             curXmaxStep += (curXmaxDiff * pixelMove)
  21.             xminStep.Add(curXminDiff)
  22.             xmaxStep.Add(curXmaxDiff)
  23.             If curXmin < t1.Item1 Then curXmin += curXminDiff
  24.             If curXmin > t1.Item1 Then curXmin -= curXminDiff
  25.             If curXmax < t1.Item2 Then curXmax += curXmaxDiff
  26.             If curXmax > t1.Item2 Then curXmax -= curXmaxDiff
  27.             curXmaxDiff = GetAbsolute(t1.Item2, curXmax) / Bildgröße.Width
  28.             curXminDiff = GetAbsolute(t1.Item1, curXmin) / Bildgröße.Width
  29.             If GetAbsolute(curXmin, t2.Item1) > GetAbsolute(t1.Item1, t2.Item1) - prec Or
  30.                 GetAbsolute(curXmax, t2.Item2) > GetAbsolute(t1.Item2, t2.Item2) - prec Then
  31.                 Exit Do
  32.             End If
  33.             countx += 1
  34.         Loop
  35.  
  36.  
  37.  
  38.         Dim curYmin As Double = t2.Item3
  39.         Dim curYmax As Double = t2.Item4
  40.         Dim curYminDiff As Double = GetAbsolute(t1.Item3, t2.Item3) / Bildgröße.Height
  41.         Dim curYmaxDiff As Double = GetAbsolute(t1.Item4, t2.Item4) / Bildgröße.Height
  42.         Dim curYminStep As Double = 0
  43.         Dim curYmaxStep As Double = 0
  44.         Dim yminStep, ymaxStep As New List(Of Double)
  45.  
  46.         Do While True
  47.             curYminStep += (curYminDiff * pixelMove)
  48.             curYmaxStep += (curYmaxDiff * pixelMove)
  49.             yminStep.Add(curYminDiff)
  50.             ymaxStep.Add(curYmaxDiff)
  51.             If curYmin < t1.Item3 Then curYmin += curYminDiff
  52.             If curYmin > t1.Item3 Then curYmin -= curYminDiff
  53.             If curYmax < t1.Item4 Then curYmax += curYmaxDiff
  54.             If curYmax > t1.Item4 Then curYmax -= curYmaxDiff
  55.             curYminDiff = GetAbsolute(t1.Item3, curYmin) / Bildgröße.Height
  56.             curYmaxDiff = GetAbsolute(t1.Item4, curYmax) / Bildgröße.Height
  57.             If GetAbsolute(curYmin, t2.Item3) > GetAbsolute(t1.Item3, t2.Item3) - prec Or
  58.                     GetAbsolute(curYmax, t2.Item4) > GetAbsolute(t1.Item4, t2.Item4) - prec Then
  59.                 Exit Do
  60.             End If
  61.             county += 1
  62.         Loop
  63.  
  64.         Dim steps As Integer
  65.         If countx > county Then
  66.             steps = countx
  67.         ElseIf countx < county Then
  68.             steps = county
  69.         Else
  70.             steps = county
  71.         End If
  72.  
  73.         Dim stepFaktor As New List(Of Tuple(Of Double, Double, Double, Double))
  74.         Dim n As Tuple(Of Double, Double, Double, Double)
  75.         Dim nxr, nxl, nyu, nyd As Double
  76.         For i As Integer = (steps - 1) To 0
  77.             If xminStep.Count - 1 >= i Then
  78.                 nxl = xminStep(i)
  79.             Else
  80.                 nxl = 0
  81.             End If
  82.             If xmaxStep.Count - 1 >= i Then
  83.                 nxr = xmaxStep(i)
  84.             Else
  85.                 nxr = 0
  86.             End If
  87.             If ymaxStep.Count - 1 >= i Then
  88.                 nyd = ymaxStep(i)
  89.             Else
  90.                 nyd = 0
  91.             End If
  92.             If yminStep.Count - 1 >= i Then
  93.                 nyu = yminStep(i)
  94.             Else
  95.                 nyu = 0
  96.             End If
  97.             n = New Tuple(Of Double, Double, Double, Double)(nxl, nxr, nyu, nyd)
  98.             stepFaktor.Add(n)
  99.         Next
  100.         Return stepFaktor
  101.     End Function
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement