大佬教程收集整理的这篇文章主要介绍了swift – 用于选择位图中每个像素而不重复的公式,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
想象一下大量的值列表,例如位图中的像素.你想以视觉上随机的顺序挑选每一个,一次一个,并且永远不会选择相同的两个,并且最终总是挑选它们.
我之前在分形生成器中使用它,因此它不仅是逐行渲染,而是以随机方式慢慢构建,但很久以前,在Java小程序中,我不再拥有代码.
我不相信它使用任何伪随机数生成器,我喜欢它的主要原因是它没有使渲染时间比直线逐行方法花费更长的时间.我看到的任何改组算法都会使渲染需要更长的时间来处理这么多的值,除非我遗漏了一些东西.
编辑:我使用了洗牌阵列方法.当应用程序加载时我会洗牌一次,无论如何都不会花那么长时间.这是我的“经销商”课程的代码.
import Foundation import Cocoa import Quartz class Dealer: NSObject { //######################################################## var deck = [(CGFloat,CGFloat)]() var count = 0 //######################################################## init(_ w:Int,_ h:int) { super.init() deck.reserveCapacity((w*h)+1) for y in 0...h { for x in 0...w { deck.append((CGFloat(X),CGFloat(y))) } } self.shuffle() } //######################################################## func shuffle() { var j:Int = 0 let @R_897_10586@l:Int = deck.count-1 for i:Int in 0...@R_897_10586@l { j = Int(arc4random_uniform(UInt32(@R_897_10586@l))) deck.swapAt(i,j) } } //######################################################## func deal() -> (CGFloat,CGFloat) { let result = deck[count] let @R_897_10586@l:Int = deck.count-1 if(count<@R_897_10586@l) { count=count+1 } else { count=0 } return(result) } //######################################################## }
init被调用一次,它调用shuffle,但如果你想要,你可以在需要时再次调用shuffle.
每当您需要“卡”时,请致电Deal.当“甲板”完成时,它循环到开头.
const int xs=640; // image resolution const int ys=480; color pixel[sz]; // image data const int sz=xs*ys; // image size int adr[sz],i,j; for (i=0;i<sz;i++) adr[i]=i; // ordered positions for (i=0;i<sz;i++) // shuffle them { j = random(sz); // pseudo-randomness with uniform diStribution swap(pixel[i],pixel[j]); }
通过这种方式,您可以确保每个像素都使用一次,并且很可能所有像素都被洗牌……
以上是大佬教程为你收集整理的swift – 用于选择位图中每个像素而不重复的公式全部内容,希望文章能够帮你解决swift – 用于选择位图中每个像素而不重复的公式所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。