小编jt7*_*t78的帖子

三维线平面交点

如果给定一条线(由线上的矢量或两个点表示),我如何找到线与平面相交的点?我已经找到了大量的资源,但我无法理解那里的方程(它们似乎不是标准的代数).我想要一个标准编程语言(我使用Java)可以解释的等式(无论多长时间).

3d intersection line plane

29
推荐指数
5
解决办法
5万
查看次数

Java中的Perlin Noise

对于我正在研究的元胞自动机项目,我需要使用不同的算法和技术随机生成二维布尔数组.目前我在应用程序中只有一种随机化 - 循环遍历数组中的每个单元格并生成一个随机双变量,然后如果随机数高于0.5,那么我将该单元格设置为true,否则它将被设置为为假.

我想研究使用更有趣的算法生成这些布尔矩阵,例如Perlin Noise或类似的东西.如果你知道除了Perlin Noise之外的其他任何东西,那么在地形生成中使用的噪声发生器或类似的东西可能会很好(Minecraft的世界一代给了我这个想法).

唯一的问题是我不知道从哪里开始(任何想法?):)

java random noise

8
推荐指数
1
解决办法
2万
查看次数

画布 - 在所有完全透明的区域填充矩形

我正在使用HTML5画布编写一个简单的2D游戏引擎.我来添加一个照明引擎.每个光源具有半径值和强度值(0-1,例如1将非常亮).还有一个环境光值,用于照亮世界上不靠近光源的所有其他物体(0-1,例如0.1将是月光).照明过程在主画布上方的单独画布上完成:

  1. 对于每个光源,在该位置绘制径向梯度,其半径与光源相同.渐变给出两个停止:中心是黑色,具有1的光强度的α,并且结束/边缘是黑色,具有1个环境光值的α.一切正常.
  2. 这是它出错的地方:/我需要用黑色和1个环境光值的alpha填充整个画布,此时我通过将context.globalCompositeOperation设置为source-out然后fillRecting整个画布来完成此操作.

我的代码是:

var amb = 'rgba(0,0,0,' + (1-f.ambientLight) + ')';
for(i in f.entities) {
    var e = f.entities[i], p = f.toScreenPoint(e.position.x, e.position.y), radius = e.light.radius;

    if(radius > 0) {
        var g = cxLighting.createRadialGradient(p.x, p.y, 0, p.x, p.y, radius);
        g.addColorStop(0, 'rgba(0,0,0,' + (1-e.light.intensity) + ')');
        g.addColorStop(1, amb);

        cxLighting.fillStyle = g;
        cxLighting.beginPath();
        cxLighting.arc(p.x, p.y, radius, 0, Math.PI*2, true);
        cxLighting.closePath();
        cxLighting.fill();
    }
}
//Ambient light
cxLighting.globalCompositeOperation = 'source-out';
cxLighting.fillStyle = amb;
cxLighting.fillRect(0, 0, f.width, f.height);
cxLighting.globalCompositeOperation = 'source-over';
Run Code Online (Sandbox Code Playgroud)

然而,我没有得到我不喜欢的引擎(左),而是得到了一种反向渐变(右).我认为这是因为当我使用source-out复合操作绘制矩形时,它会影响渐变本身的颜色,因为它们是半透明的. …

javascript html5 canvas clipping composite

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

求线段-矩形交点

简单地说,我有:

  • 视口矩形,其中 (0,0) 是左下角,(1,1) 是右上角,(0.5,0.5) 是屏幕中心。
  • 矩形外部的点 (a,b)。

这是在视口坐标中,因此 +X 位于右侧,+Y 位于屏幕上方。

我需要一个函数,它接受这些参数并返回矩形边缘上的线(矩形中心 (0.5,0.5) 和点 (a,b) 之间)相交的点。

我知道如何使用给定的坐标在纸上完成此操作,但当涉及到代码时我无法弄清楚。另外,我意识到这样的问题已经在不同的线程中得到解决 - 但我在任何地方都找不到简单的输入到输出函数。

我在 Unity3D 引擎中执行此操作,因此最好使用 Javascript,但任何语言或伪代码都会有很大帮助,因为我可能可以手动转换它。

编辑 为了澄清,我正在寻找类似的东西:

function IntersectFromViewportCenter(x : float, y : float) {
    ...
    return Point(x1, y1);
}
Run Code Online (Sandbox Code Playgroud)

其中 (x,y) 是圆外的点,(x1,y1) 是交点。

谢谢

geometry intersection unity-game-engine unityscript

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