2013-09-12 1 views
2

У меня есть два набора точек, я хочу создать прямоугольник из этих двух точек, который всегда положителен, т. Е. Самая низкая координирующая пара - это начальная точка, а самая старшая координатная пара - конечная точка.Есть ли более простой способ создать положительный прямоугольник из двух точек?

Я создал функцию, которая делает это, но она не кажется очень элегантной - это лучший способ/встроенная функциональность для этого?

Private Function CalculateDraggedRectangle(ByVal startX As Integer, ByVal startY As Integer, ByVal currentX As Integer, ByVal currentY As Integer) As Rectangle 
    Dim rX, rY, rWidth, rHeight As Integer 
    If currentX < startX Then 
     If currentY < startY Then 
      rX = currentX 
      rY = currentY 
      rWidth = startX - currentX 
      rHeight = startY - currentY 
     Else 
      rX = currentX 
      rY = startY 
      rWidth = startX - currentX 
      rHeight = currentY - startY 
     End If 
    Else 
     If currentY < startY Then 
      rX = startX 
      rY = currentY 
      rWidth = currentX - startX 
      rHeight = startY - currentY 
     Else 
      rX = startX 
      rY = startY 
      rWidth = currentX - startX 
      rHeight = currentY - startY 
     End If 
    End If 

    Return New Rectangle(rX, rY, rWidth, rHeight) 
End Function 

ответ

3

Возможно, что-то вроде этого

Dim rX = Math.Min(startX, currentX) 
Dim rY = Math.Min(startY, currentY) 
Dim rWidth = Math.Abs(startX - currentX) 
Dim rHeight = Math.Abs(startY - currentY) 
Return New Rectangle(rX, rY, rWidth, rHeight) 
2

Используйте Math.Min и Math.Abs функции

rX = Math.Min(startX, currentX) 
rY = Math.Min(startY, currentY) 
rWidth = Math.Abs(startX - currentX) 
rHeight = Math.Abs(startY - currentY) 

Ваш подход может быть упрощена путем обработки горизонтальных и вертикальных частей по отдельности:

Private Function CalculateDraggedRectangle(ByVal startX As Integer, ByVal startY As Integer, ByVal currentX As Integer, ByVal currentY As Integer) As Rectangle 
    Dim rX, rY, rWidth, rHeight As Integer 

    If currentX < startX Then 
     rX = currentX 
     rWidth = startX - currentX 
    Else 
     rX = startX 
     rWidth = currentX - startX 
    End If 
    If currentY < startY Then 
     rY = currentY 
     rHeight = startY - currentY 
    Else 
     rY = startY 
     rHeight = currentY - startY 
    End If 

    Return New Rectangle(rX, rY, rWidth, rHeight) 
End Function