我正在创建一个系统,可以获得图像的所有颜色128x192乘8x8正方形(换句话说,我总共有384个正方形)。 在做了一些比较之后,我通过找到像这个例子的方格,将384个方格缩小到不到一半:
方形(20)颜色 - >红色,绿色,蓝色,黄色,黑色
方形(123)颜色 - >红色,黄色
方形(123)将被删除,因为方形(20)具有方形(123)所具有的所有颜色。
注意:我使用的是RGB代码。
在我放置首先使用更多颜色的方块后(方块总是少于15种颜色)。
同一组中的所有颜色都是不同的颜色,但在其他组中它们将是相同的。
我现在的第二步是创建托盘(15种颜色),为此我需要比较更大的托盘并添加一些颜色并获得颜色的性能 我使用递归和List(Of Color)来基本尝试找到最好的托盘(15/16种颜色)。
性能:如果我们选择生成的托盘,我们会删除多少GroupofColors
不幸的是,我没有完全使用递归因为我的
GroupOfColors(0).Count-1 = 10(我们不能忘记0)
GroupOfColors(0).Item(11)=更改
GroupOfColors(0).Item(12)=固定颜色(240,220,144)
GroupOfColors(0).Item(13)=更改
GroupOfColors(0).Item(14)=更改
GroupOfColors(0).Item(15)=更改
基本上我需要理解的是颜色12被修复的动机,如果有人能告诉我问题在哪里,我会贬低。 (目前它进行了500900次比赛并花了2分钟来结束这部分计划)。 当GroupOfColors变得更低时,我相信更多的位置,但我没有耐心等待30分钟来对10个托盘作出反应。 (我做了数学,我应该做9995000400而不是500900,如果需要500900需要2分钟,可悲的是39908分钟= 665小时只做一个托盘,xd)
如果有更快的方法,请执行相同的结果,请说明。
Dim Performence As New List(Of Integer)
Dim AllWays As New List(Of List(Of Color))'have all attemps of creating pallets
Dim AlmostAllColors As New List(Of Color)
Dim i As Integer
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Created to get Allcolors except the one of GroupOfColors(0)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim dontallow As Boolean
For Each color In AllColors
dontallow = False
For Each color1 In GroupOfColors(0)
If color = color1 Then
dontallow = True
End If
Next
If dontallow = False Then
AlmostAllColors.Add(color)
End If
Next
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
For Each cor1 In AlmostAllColors
Dim Way As New List(Of Integer)
Dim NewPallete As New List(Of Color)(GroupOfColors(0))
NewPallete.Add(cor1)
If NewPallete.Count = 15 Then
''Give the changes that will happen
Performence.Add(Mapping(NewPallete))
''ADD THE WAY
AllWays.Add(NewPallete)
Else
Dim UsedColors As New List(Of Color)
UsedColors.Add(cor1)
recursivo(AlmostAllColors, NewPallete, UsedColors, Performence, AllWays)
NewPallete.RemoveAt(NewPallete.Count - 1)
End If
Next
这是递归函数
Sub recursivo(AlmostAllColors As List(Of Color), NewPallete As List(Of Color), UsedColors As List(Of Color), ByRef Performence As List(Of Integer), AllWays As List(Of List(Of Color)))
Dim colorused As Boolean = False
''cor2
For Each cor In AlmostAllColors
colorused = False
For Each color In UsedColors
If color = cor Then
colorused = True
End If
Next
If colorused = False Then
NewPallete.Add(cor)
'way1.Add(j)
If NewPallete.Count = 15 Then
Performence.Add(Mapping(NewPallete)) ''Mapping checks the NewPallete Performence
Dim NewPallete1 As New List(Of Color)
For Each color In NewPallete
NewPallete1.Add(color)
Next
AllWays.Add(NewPallete1)
NewPallete.RemoveAt(NewPallete.Count - 1)
'way
Else
UsedColors.Add(cor)
recursivo(AlmostAllColors, NewPallete, UsedColors, Performence, AllWays)
NewPallete.RemoveAt(NewPallete.Count - 1)
End If
End If
Next
End Sub