我已经完全掌握了3D中Perlin Noise的艺术,现在我正在尝试将相同的实现用于2D算法.问题似乎在于选择我的渐变方向.在3D中,我在均匀分布的方向上使用16个渐变,这非常有用.在2D我想我会使用8个渐变.上,下,左,右和四个对角线方向.
这是我得到的:

噪声的一般外观总是正确的,但正方形的边缘并不完全匹配.我也尝试使用其他渐变或更少的渐变,但得到类似的结果.在另一个例子中,您可以看到边缘有时会匹配,并且该区域的结果很好 -

当我不使用渐变而只是在4个角中的每个角落随机拾取的值之间进行插值时,我得到了正确的结果,这就是让我觉得渐变部分会弄乱它的原因.
这是我的代码:
//8 different gradient directions
private Point[] grads = new Point[] {
new Point(0, 1), new Point(1, 1), new Point(1, 0), new Point(1, -1),
new Point(0, -1), new Point(-1, -1), new Point(-1, 0), new Point(-1, 1),};
//takes the dot product of a gradient and (x, y)
private float dot2D(int i, float x, float y)
{
return
grads[i].X * x + grads[i].Y * y;
}
public float Noise2D(float x, float y)
{
int
ix = …Run Code Online (Sandbox Code Playgroud) 我有一个单位直角三角形和3个顶点的每个顶点的值.我需要插值以在三角形内的某个点找到值.几个小时的搜索没有发现实际上告诉我如何做到这一点.这是我最接近的尝试,实际上非常接近但不太正确 -
result =
v1 * (1 - x) * (1 - y) +
v2 * x * (1 - y) +
v3 * x * y;
Run Code Online (Sandbox Code Playgroud)
v1,v2和v3是三角形的3个顶点处的值.(x,y)是您尝试查找值的三角形中的点.
任何一种方法都会对我有所帮助.它不一定需要是单位/右三角形.
更新的信息:我有一个均匀间隔点的网格和每个点的值.我在网格上最近的3个点做了一个三角形.这是一张图片来说明它 -

所以我必须在5,3和7之间进行插值以找到x的值.该点也可以位于另一个三角形内,这意味着您将在5,7之间进行插值,并在该方块的左下角进行插值.
在我展示的代码中,v1 = 5,v2 = 3,v3 = 7.x
是"x"方向的分数距离(范围[0-1]),y是"y"方向的分数距离.
在图片的例子中,x可能约为0.75,y约为0.2
这是我最接近的尝试 -

使用 - 创建 -
if (x > y) //if x > y then the point is in the upper right triangle
return
v1 * (1 - x) * (1 - y) +
v2 * x * (1 …Run Code Online (Sandbox Code Playgroud) 我的计算机在处理项目时关闭,当我再次打开C#并恢复它时,我收到一个错误说
"for filename.cs"没有可用的编辑器
确保安装了文件类型(.cs)的应用程序
而现在我根本无法访问我的代码.
我正在使用Visual C#2010 express.
我尝试直接打开它,它会调出C#,但.cs文件会在记事本中打开.文件大小为30kb,因此不会被删除.并且在上次运行的调试文件夹中仍然有一个工作的.exe.有没有办法恢复代码?
我试图重新创建非常简单的GDI +函数,例如缩放和旋转图像.原因是一些GDI函数不能在多个线程上完成(我发现了一个使用进程的工作,但不想进入它),并且在一个线程上处理数千个图像并没有几乎削减它.我的图像也是灰度图像,因此自定义函数只需要担心一个值而不是4.
无论我尝试重新创建什么样的函数,即使在高度优化的情况下,它仍然总是慢几倍,尽管与GDI相比大大简化了(我在一维字节数组上操作,每个像素一个字节)
我想也许我旋转每个点的方式可能是不同的,所以我完全把它拿出来,并且基本上有一个功能贯穿每个像素,只是把它设置为它已经是什么,而且只是大致与GDI的速度,即使GDI正在进行实际旋转并且每个像素改变4个不同的值.
是什么让这成为可能?有没有办法使用自己的功能匹配它?
我使用菱形平方算法生成随机地形.它工作得很好,除了我将这些大锥形状伸出或伸入地形.问题似乎是每时不时地设置一个点太高或太低.
这是问题的图片

当我将平滑度设置得非常高时,可以更好地看到它

这是我的代码 -
private void CreateHeights()
{
if (cbUseLand.Checked == false)
return;
int
Size = Convert.ToInt32(System.Math.Pow(2, int.Parse(tbDetail.Text)) + 1),
SideLength = Size - 1,
d = 1025 / (Size - 1),
HalfSide;
Heights = new Point3D[Size, Size];
float
r = float.Parse(tbHeight.Text),
Roughness = float.Parse(RoughnessBox.Text);
//seeding all the points
for (int x = 0; x < Size; x++)
for (int y = 0; y < Size; y++)
Heights[x, y] = Make3DPoint(x * d, 740, y * d);
while (SideLength …Run Code Online (Sandbox Code Playgroud) algorithm height procedural-programming map procedural-generation
ImageNet图像的大小均不同,但是神经网络需要固定大小的输入。
一种解决方案是采用以图像的中心点为中心的,适合图像大小的裁切大小。这可行,但有一些缺点。通常,图像中感兴趣的对象的重要部分会被切掉,甚至在某些情况下,正确的对象会完全丢失,而另一个属于不同类别的对象可见,这意味着您的模型将被错误地训练为该图像。
另一种解决方案是使用整个图像,并将其零填充到每个图像具有相同尺寸的位置。但是,这似乎会干扰训练过程,并且该模型将学会在图像边缘附近寻找垂直/水平的黑色斑点。
通常做什么?
我有一些 pyCUDA 代码可以使 GPU 保持 100% 的使用率,并且似乎将 GPU 占用到我的屏幕仅每秒更新一次的程度。
更改块和网格大小无济于事。
网格中的每个线程经过大约 130 万次循环,并且只有大约 6 个 16 个线程的块。如果我把它做成一个小循环就没有问题,但不幸的是它必须那么大,而且我认为没有好的方法可以将工作分配到更多的块中。
有没有办法限制我的程序的 GPU 使用,或者改变屏幕的优先级?
Windows 上的 GTX 1060。
这应该是一个非常简单的问题,但经过大量的搜索,似乎没有任何工作的例子.我只是希望我的XNA窗口开始最大化.我知道如何设置窗口的宽度和高度,但这并不完全相同.我还需要在不全屏的情况下这样做.我只想要一个普通的最大化窗口.