首先,我知道这个问题听起来好像我没有搜索,但我做了很多.
我为C#编写了一个小的Mandelbrot绘图代码,它基本上是一个带有PictureBox的窗体,我在其上绘制了Mandelbrot集.
我的问题是,它是非常慢的.如果没有深度变焦,它可以很好地工作并且移动并且变焦非常平滑,每次绘制只需不到一秒钟,但是一旦我开始放大一点并到达需要更多计算的地方,它就变得非常慢.
在其他Mandelbrot应用程序上,我的计算机在我的应用程序中工作得慢得多的地方确实很好,所以我猜我可以做很多事情来提高速度.
我做了以下事情来优化它:
我没有在位图对象上使用SetPixel GetPixel方法,而是使用LockBits方法直接写入内存,这使得事情变得更快.
我没有使用复数对象(我自己创建的类,而不是内置的类),而是使用2个变量re和im模拟复数.这样做可以减少乘法,因为在计算过程中对实部和虚部进行平方是一些事情,所以我只需将方块保存在变量中并重复使用结果而无需重新计算.
我使用4个线程绘制Mandelbrot,每个线程执行不同的图像四分之一,它们都同时工作.据我所知,这意味着我的CPU将使用其4个核心来绘制图像.
我使用Escape Time算法,据我所知最快?
这是我如何在像素之间移动并计算,它被注释掉,所以我希望它是可以理解的:
//Pixel by pixel loop:
for (int r = rRes; r < wTo; r++)
{
for (int i = iRes; i < hTo; i++)
{
//These calculations are to determine what complex number corresponds to the (r,i) pixel.
double re = (r - (w/2))*step + zeroX ;
double im = (i - (h/2))*step - zeroY;
//Create the Z complex number
double zRe = 0;
double zIm = 0;
//Variables …Run Code Online (Sandbox Code Playgroud) 我想观察有时被删除然后重新创建的元素。我的问题是观察者被元素破坏,并且不会被元素重新创建,并且我无法检测何时发生这种情况以便重新创建观察者。
MDN表示“注意:根据规范,如果目标元素被删除,垃圾收集器将删除 MutationObserver。”
有没有办法检测到该删除?我正在观察一个元素,我想知道该元素何时被删除。我可以检测它的子节点是否已被删除,但我无法检测它本身是否已被删除。
我注册了所有突变,但删除元素时不会调用回调。
我尝试使用 setInterval 每秒检查元素是否消失,但是当元素被删除然后快速重新创建时,这种方法效果不佳。
我有一个函数作为参数2对象:a和b
函数检查(使用一个非常长的算法)这些对象中的哪一个更好.
如果a更好,则返回-1,如果b更好则返回1,如果绑定则返回0
我的问题是:
我在列表中有21个这样的对象.
我需要找出,使用上面的函数(函数不能更改,唯一的方法是比较2个对象,这是一个非常复杂和长的算法),这21个对象中的哪一个是最好的.
我试过几个小时思考如何有效地做到这一点而没有做太多次相同的比较,如何编写一个算法,找出哪一个是最好的(如果其中两个是并列的,它们都是最好的,它不会不管怎么样,虽然我认为甚至不可能出现平局,但我无法想出任何好的东西.
函数的名称是handCompare(a, b)
在名单中找到的对象Combos,len(combos)是21我需要一个算法,它将找到组合列表中的最佳项目
感谢阅读,我希望你能帮忙:)
c# ×1
comparison ×1
dom ×1
fractals ×1
gpu ×1
html ×1
javascript ×1
list ×1
mandelbrot ×1
optimization ×1
python ×1