首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在某项功能之下或以上填充像素

问在某项功能之下或以上填充像素
EN

Computer Graphics用户
提问于 2021-04-03 12:48:46
回答 1查看 27关注 0票数 0

似乎是一个简单的问题,但我只是不能把我的头围绕着它。

我有一个配置文件,其中声明了几个函数。看起来是这样的:

代码语言:javascript
复制
"bandDefinitions" : [
    {
        "0": ["x^2 + 2*x + 5 - y", "ABOVE"]
    },
    {
        "0": ["sin(6*x) - y", "UNDER"]
    },
    {
        "0": ["tan(x) - y", "ABOVE"]
    }
]

这些函数应该生成3幅图像。每幅图像都应根据方程的解来填充,并提供位置(以下或以上)。我需要把坐标系移到图像的中心,所以我在方程中加入了-y。应该填充的部分应该是白色的,另一部分应该是黑色的。

为了解释我的意思,我提供了二次函数和sin函数的图像。

我正在为x in [-W/2, W/2]求解方程,并将解存储到数组中,如下所示:

代码语言:javascript
复制
#Generates X axis dots and solves an expression which defines a band
#Coordinate system is moved to the center of the image
def __solveKernelDefinition(self, f):
    xAxis = range(-kernelSize, kernelSize)
    dots = []

    for x in xAxis:
        sol = f(x, kernelSize/2)
        dots.append(sol)

    print(dots)
    return dots

我在测试一些像素是否应该像这样的白色:

代码语言:javascript
复制
def shouldPixelGetNoise(y, x, i, currentBand):
    shouldGetNoise = True

    for bandKey in currentBand.bandDefinition.keys():
        if shouldGetNoise:
            pixelSol = currentBand.bandDefinition[bandKey][2](x, y)
            renderPos = currentBand.bandDefinition[bandKey][1]
            bandSol = currentBand.bandDefinition[bandKey][0]
            shouldGetNoise = shouldGetNoise and pixelSol <= bandSol[i] if renderPos == Position.UNDER else pixelSol >= bandSol[i]
        else:
            break

    return shouldGetNoise

def kernelNoise(kernelSize, num_octaves, persistence, currentBand, dimensions=2):
    simplex = SimplexNoise(num_octaves, persistence, dimensions)
    data = []

    for i in range(kernelSize):
        data.append([])
        i1 = i - int(kernelSize / 2)

        for j in range(kernelSize):
            j1 = j - int(kernelSize / 2)
            if(shouldPixelGetNoise(i1, j1, i, currentBand)):
                noise = normalize(simplex.fractal(i, j, hgrid=kernelSize))
                data[i].append(noise * 255)
            else:
                data[i].append(0)

我只得到了凸二次函数的好输出。如果我试图把它们结合起来,我就会得到一个黑色的图像。Sin根本不起作用。我看到这种蛮力的方法不会引导我去任何地方,所以我想知道我应该用什么算法来生成这类图像?

EN

回答 1

Computer Graphics用户

发布于 2021-04-04 10:00:50

在这一点上计算直线的切线,用它生成一个切线向量,然后使用直线上的点、被测试的点和新的点来创建两个向量。取矢量的点积。正数在线的一边,负值在另一边。(上、下)。

票数 1
EN
页面原文内容由Computer Graphics提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://computergraphics.stackexchange.com/questions/10803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档