小编Cos*_*con的帖子

在JavaScript中,假设undefined没有被覆盖,它有多危险?

每次有人提到测试时undefined,都会指出undefined不是一个关键字,因此可以设置为"hello",所以你应该使用 typeof x == "undefined".这对我来说似乎很荒谬.没有人会这样做,如果他们这样做,那将是足够的理由永远不会使用他们写的任何代码......对吗?

我发现一例人谁无意中设定的undefinednull,这给出一个理由,以避免假设undefined不会被覆盖.但是,如果他们这样做了,那么这个bug就不会被发现,我也看不出它有多好.

在C++中,每个人都清楚地知道这是合法的#define true false,但没有人建议你避免true使用它0 == 0.你只是假设没有人会成为一个足够强大的混蛋,如果他们这样做,再也不会相信他们的代码了.

这有没有真正咬过别人分配给undefined(有意)的人而且它破坏了你的代码,或者这更像是一个假想的威胁?我愿意冒昧地让我的代码更具可读性.这是一个非常糟糕的主意吗?

重申一下,我并不是要求如何防止重新分配未定义.我已经看过那些已经写过100次的技巧了.我问不使用这些技巧是多么危险.

javascript undefined

84
推荐指数
3
解决办法
9095
查看次数

具有不同半径的圆覆盖算法

对于一个游戏,我绘制了几千个随机分布的圆形的密集簇,这些圆圈具有不同的半径,由一系列(x,y,r)三元组定义.这是一个包含14,000个圆圈的示例图像:

示例图像由14,000个圆圈组成

我有一些动态效果,比如合并群集,但为了实现这一点,我需要每帧重绘所有的圆圈.

绘制的圆圈中的许多(可能是80-90%)被后续绘制覆盖.因此我怀疑通过预处理,我可以通过消除覆盖的圆圈来显着加快我的绘制循环.是否有一种能够以合理的效率识别它们的算法?

我可以忍受相当多的假阴性(即绘制一些实际被覆盖的圆圈),只要它不是那么多,绘制效率会受到影响.我也可以容忍误报,只要它们几乎是正面的(例如删除一些仅覆盖99%的圆圈).我也可以改变圈子的分布方式,只要它看起来还不错.

algorithm math geometry

15
推荐指数
2
解决办法
1176
查看次数

为什么单纯形噪声似乎比经典的Perlin噪声具有*更多*伪影?

我阅读了Stefan Gustavson关于单纯噪声的优秀论文,其中我被承诺:

单纯形噪声没有明显的方向伪影

与"经典"佩林噪音形成鲜明对比.我兴奋地实施它,以发现相反的情况似乎是真的.我确实看到了经典噪音中的人工制品,但我看到至少与单轴噪声一样多的伪像,与主轴成45度对齐.将噪声映射到阶跃函数时,它们尤其明显.

为了确保它不是我的实现问题,我使用了别人的JavaScript实现.比较一些图像:

而且这里有一个画廊与他们.在最后一张图像中,查找与水平/垂直方向成45度对齐的边框.他们到处都是.如果需要,我可以突出其中一些,但它们对我来说似乎非常明显.(再次,我也在经典的噪声图像中看到它们.)

编辑:为了更加定量,我采样了100万个随机点,并且对于每个点,我数值计算经典和单纯噪声的梯度,并采用投影到xy平面上的梯度方向的直方图.如果没有方向性伪影,则图形将是平坦的.但你可以看到经典和单纯的噪音每45度就会出现一次峰值.

这是单纯噪声算法的问题吗?这是可以修复的吗?或者我是唯一一个将此视为问题的人?

algorithm procedural-generation noise perlin-noise simplex-noise

12
推荐指数
2
解决办法
5054
查看次数

将PulseAudio流式传输到文件(可能使用GStreamer)

我在Ubuntu上,我想将PulseAudio输出记录到文件中,以记录pygame程序.格式没关系,因为我之后可以改变它,所以原始音频很好.

环顾四周,似乎GStreamer可能能够解决这个问题,但我对它并不熟悉,并且广泛的搜索还没有得出答案.因此欢迎涉及GStreamer或其他方面的答案.

谢谢!

audio-streaming gstreamer pulseaudio

6
推荐指数
1
解决办法
5235
查看次数

具有边缘情况的整数匝数算法

我想要关于一个点的闭合的分段线性路径(例如多边形)的绕组数,但另外,我想检测路径何时通过该点.因此,我将标准绕组数加倍.对于具有CCW方向的非交叉多边形,该值将为:

  • 如果该点在多边形之外,则为0
  • 如果该点位于多边形的边或顶点上,则为1
  • 2如果该点位于多边形的内部

在其他情况下也是如此.(编辑:几个例子的图像)

当点位于边缘或顶点时,我发现的每个算法都会失败.

我的另一个要求是,当所有输入(即点的坐标和路径的顶点)是整数时,它必须给出完全正确的结果.所以这几乎排除了trig函数或平方根,并且必须谨慎使用除法.

并不需要处理有两个连续的重合点,或一个180度的大转弯退化路径.

无论如何,我想我有一个解决方案.然而,它似乎有点不优雅,我不相信这是正确的.(我真的很困惑当点在顶点时会发生什么.)这是在python中:

def orient((x,y), (a0,b0), (a1,b1)):
    return cmp((a1-a0)*y + (b0-b1)*x + a0*b1-a1*b0, 0)
def windingnumber(p0, ps):
    w, h = 0, [cmp(p, p0) for p in ps]
    for j in range(len(ps)):
        i, k = (j-1)%len(ps), (j+1)%len(ps)
        if h[j] * h[k] == -1:
            w += orient(p0, ps[j], ps[k])
        elif h[j] == 0 and h[i] == h[k]:
            w += orient(ps[k], ps[i], ps[j])
    return w
Run Code Online (Sandbox Code Playgroud)

链接到包含注释和单元测试的版本.

我想要一个正确算法的链接,或者我的算法正确的一些确认,或者我的算法失败的测试用例.谢谢!

python algorithm math geometry computational-geometry

5
推荐指数
1
解决办法
1631
查看次数