Учитывая холст, скажем, 10x10, и учитывая 3 прямоугольника / квадрата.
Холст = 10x10
Прямоугольник 1 = 2x2 Прямоугольник 2 = 3x3 Прямоугольник 3 = 2x4
Я создал рекурсивную функцию, которая зацикливает каждую позицию каждого прямоугольника на холсте, и она отлично работает.(Я включил функцию ниже, если кто-то хочет ее увидеть, но я не думаю, что это необходимо).
Мы можем видеть, что прямоугольники 1 и 2 не вращаются, т.е. если вы поворачиваете любой из них90 градусов по сути они одинаковой формы.Однако прямоугольник 3 может вращаться.
Как изменить / построить функцию цикла / рекурсии, чтобы она зацикливалась на каждой позиции каждого прямоугольника вместе с каждым возможным вращением?
Цель состоит в том, чтобы выполнить циклчерез каждую возможную подгонку форм на холсте.
Спасибо за любую помощь!
Sub recurse(ByVal startPoint As Integer)
Dim x As Integer
Dim y As Integer
Dim validSolution As Boolean = isSolutionValid()
Dim loopXTo As Integer
Dim loopYTo As Integer
Dim solutionRating As Integer
'If parent nodes create invalid solution, we can skip (375 iterations from 1,600 iterations saving)
If validSolution = True Then
If (startPoint = 0) Then
loopXTo = Math.Floor((canvasCols - squareObjects(startPoint).sqRows()) / 2) '576 iterations from 1,680 iterations
loopYTo = Math.Floor((canvasRows - squareObjects(startPoint).sqCols) / 2) '31,104 iterations from 90,720 iterations
Else
loopXTo = canvasCols - squareObjects(startPoint).sqRows
loopYTo = canvasRows - squareObjects(startPoint).sqCols
End If
'Loop all positions on canvas
For x = 0 To loopXTo
For y = 0 To loopYTo
'Set coords of square
squareObjects(startPoint).setSquareCords(x, y)
'Phyiscally place it in canvas
placeSquareOnCanvas(x, y, squareObjects(startPoint).sqRows, squareObjects(startPoint).sqCols)
'Recursive, get next square
If (startPoint + 1 < totalSquares) Then
recurse(startPoint + 1)
Else
validSolution = isSolutionValid()
'Is solution valud
If (validSolution = True) Then
solutions = solutions + 1
End If
iterations = iterations + 1
'Response.Write("<br /><b>Iteration " & iterations & "</b>")
If (validSolution) Then
'Rate solution, record if best
solutionRating = rateSolution()
If solutionRating > bestCellSaving Then
bestCellSaving = solutionRating
copySolution()
End If
'Response.Write(" <span style='color:green'> <B>VALID SOLUTION</B></span> (" & rateSolution() & ")")
End If
'printCanvas(canvas)
End If
squareObjects(startPoint).removeSquare(canvas)
Next
Next
End If
End Sub