Tag: math

有效的mathalgorithm来计算交叉点

对于我正在开发的游戏,我需要一个可以计算交叉点的algorithm。 我已经解决了这个问题,但是我这样做的方式真的很糟糕,我希望这里有人可能有一个更优雅的解决scheme。 一对点代表它们之间画出的一条线的终点。 给定两对点,划线是否相交,如果是,在哪一点? 例如,将线(Ax,Ay) – (Bx,By)和(Cx,Cy) – (Dx,Dy) 任何人都可以想出解决scheme吗? 任何语言的解决scheme都可以。 编辑:我应该更清楚一点,如果交点超出了线段的长度,algorithm必须返回false。

如何计算切线和Binormal?

在OpenGL着色语言(GLSL)中谈论凹凸贴图,镜面高光和这些东西, 我有: 顶点数组(例如{0.2,0.5,0.1,0.2,0.4,0.5,…}) 一组法线(例如{0.0,0.0,1.0,0.0,1.0,0.0,…}) 世界空间中点光源的位置(例如{0.0,1.0,-5.0}) 观众在世界空间中的位置(例如{0.0,0.0,0.0})(假设观众处于世界的中心) 现在,我怎样才能计算每个顶点的Binormal和Tangent? 我的意思是,计算二元法的公式是什么,基于这些信息我必须使用什么? 而关于切线? 无论如何,我将构buildTBNmatrix,所以如果你知道一个基于这些信息直接构buildmatrix的公式将是很好的! 哦,是的,我也有纹理坐标,如果需要的话。 就我所说的GLSL而言,每个顶点解决scheme都是很好的,我的意思是,一次不需要访问多个顶点信息。 —-更新—– 我发现这个解决scheme: vec3切线; vec3 binormal; vec3 c1 = cross(a_normal,vec3(0.0,0.0,1.0)); vec3 c2 = cross(a_normal,vec3(0.0,1.0,0.0)); 如果(长度(c1)>长度(c2)) { tangent = c1; } 其他 { tangent = c2; } tangent = normalize(tangent); binormal = cross(v_nglNormal,tangent); binormal = normalize(binormal); 但是我不知道这是否是100%正确的。

简化mathexpression式的策略

我有一个结构良好的树,代表一个mathexpression式。 例如,给定string: "1+2-3*4/5" 4/5 "1+2-3*4/5" ,将其parsing为: subtract(add(1,2),divide(multiply(3,4),5)) 这是表示为这棵树: 我想要做的就是拿走这棵树,尽可能减less它。 在上面的例子中,这很简单,因为所有的数字都是常量。 然而,一旦我允许未知数(用$表示,后跟一个标识符),情况就会变得更加复杂: "3*$a/$a"变成divide(multiply(3,$a), $a) 这应该简化为3 ,因为$a条款应该互相取消。 问题是,“我怎样才能以通用的方式认识到这一点?” 我如何认识到min(3, sin($x))总会是sin($x) ? 如何识别sqrt(pow($a, 2))是否是abs($a) ? 我怎样才能认识到nthroot(pow(42, $a), $a) (42 次方的根)是42 ? 我意识到这个问题是相当广泛的,但是我一直在反对这个问题一段时间,还没有拿出足够满意的东西。

计算知道起点和距离的第二点

使用纬度和经度值(A点),我试图计算另一个B点,X点距离A点0弧度。然后显示B点纬度和经度值。 示例(伪代码): PointA_Lat = x.xxxx; PointA_Lng = x.xxxx; Distance = 3; //Meters bearing = 0; //radians new_PointB = PointA-Distance; 我能够计算两点之间的距离,但我想find的是知道距离和方位的第二点。 最好在PHP或Javascript。 谢谢

用内存构造函数的最好方法

美好的一天, 我有一些非常slooooow和复杂的function,说f[x,y] 。 我需要构build它的详细ContourPlot 。 此外,函数f[x,y]有时会由于缺乏物理内存而失败。 在这种情况下,我必须停止评估,并自行调查{x,y}点的问题。 然后,我可以将元素{x,y,f [x,y]}添加到f[x,y] (比如“cache”)的计算值列表中f[x,y]然后重新开始评估ContourPlot 。 ContourPlot必须从caching中取得所有已经计算ContourPlot f值。 我宁愿将这样的列表存储在某个文件中,以便稍后重用它。 手工添加问题点可能比较简单。 如果f的计算值列表可能包含10000-50000个点,那么实现这个最快的方法是什么?

如何通过指定alpha混合量来计算RGB颜色?

我正在写一个颜色select器,可以从屏幕上的任何位置获取像素RGB值。 我想也可以select指定我select的颜色已经有一个alpha值。 我只是想知道如何计算结果颜色。 例如: 由此产生的像素颜色是240,247,249,但我知道原来的颜色有10%的不透明度,并在白色(255,255,255)的背景上。 计算原始RGB值的计算是什么?

我如何使用numpy.correlate做自相关?

我需要做一组数字的自动关联,据我所知,它只是集合与自身的相关性。 我试过用numpy的相关函数,但我不相信结果,因为它几乎总是给出一个向量,其中第一个数不是最大的,它应该是这样的。 所以,这个问题真的是两个问题: numpy.correlate究竟是干什么的? 我怎样才能使用它(或其他)做自相关?

什么是最广泛使用的C ++vector/matrixmath/线性代数库,以及它们的成本和收益折衷?

似乎很多项目慢慢需要做matrix运算,陷入了先构build一些向量类并慢慢增加function的陷阱,直到被抓住build立一个半自定义的线性代数库,并依赖于它。 我想避免这种情况,而不是build立在一些切线相关的库(例如OpenCV,OpenSceneGraph)上。 那里常用的matrixmath/线性代数库是什么,为什么会决定使用另一个呢? 有什么会因为某种原因被build议不要使用? 我特别在几何/时间上下文*(2,3,4 Dim)*中使用它,但将来可能会使用更高维的数据。 我正在寻找关于API,速度,内存使用,宽度/完整性,狭窄/特定性,可扩展性和/或成熟度/稳定性的差异。 更新 我结束了使用Eigen3,我非常满意。

c ++ Sin和Cos

我确信这是一个非常愚蠢的问题,但是当我将180度的angular度传递给c / c ++的cos()和sin()函数时,我似乎收到了一个不正确的值。 我知道它应该是:0.0547的罪和0.99的cos,但我得到3.5897934739308216e-009的罪和cos为-1.00000 我的代码是: double radians = DegreesToRadians( angle ); double cosValue = cos( radians ); double sinValue = sin( radians ); DegreesToRadians()是: double DegreesToRadians( double degrees ) { return degrees * PI / 180; } 谢谢 :)

三维相对angular度和计算

我有一个四元数forms的旋转r1的3D对象。 我用本地欧拉angular度旋转它: transform.Rotate(new Vector3(0f, 15f, 0f), relativeTo: Space.Self); // right transform.Rotate(new Vector3(-10f, -5f, 0f), relativeTo: Space.Self); // left up transform.Rotate(new Vector3(0f, 0f, 90f), relativeTo: Space.Self); // 90 clockwise 现在我有旋转r2 。 如果我不知道已经应用了什么angular度,我如何检索局部Y轴旋转总和15-5 + 0 = 10? 要得到这个价值可能是不可能的(10),但你有我的想法。 也许是我可以在当地的r2空间得到Y差异?