规划从当前速度矢量到目标矢量的推力的平稳变化
tl; dr:"我不确定如何计算一个向量和另一个向量之间的推力平稳过渡." 我正在编程一个简单的游戏,敌人在开放空间(没有墙壁)追逐玩家.我正在独立计算敌人的X&Y速度,如果他们将他们朝玩家的方向带动并迅速放慢速度(例如,Enementlecity.x> 0&player.x 尽管游戏玩法试图躲避敌人非常有趣,但我希望让敌人使用适当的物理学行为.我目前正在做的是让敌人根据他们与玩家之间的角度设定自己的推力(想想飞船),并将其推力加速至最大速度(计算敌人三角形的侧面C).一旦发生这种情况,我不确定要进行推力调整的最佳方法.如果我不留下最大速度,敌人会加速,但会轻松地超越球员,然后花很长时间才能朝玩家的方向迈出足够的势头. 我想发生的事情是让敌人不断地调整到球员的途径,以定位在任何地方(我不希望他们预测您的位置).然后,当他们错过球员时,我想使用相同的推力和加速公式来重新调整其速度并将其发送回球员. 我认为这将涉及两个向量:一个敌人目前正在旅行,一个敌人想要旅行的地方(将
0 2024-02-20
编程技术问答社区
Google'的Android OpenGL教程在教授不正确的线性代数吗?
在帮助另一个用户解决了有关响应触摸事件 Android教程,我下载了源代码,并对我所看到的非常困惑.该教程似乎无法决定是否要使用行向量或列向量,并且看起来都混合给了我. 在Android Matrix页面上,他们声称其约定是列矢量/列 - Major,这是OpenGl的典型代表. 我是对的,还是我缺少的东西?这是它的相关位: 首先通过乘以mprojmatrix * mvmatrix创建mvpmatrix.到目前为止还不错. // Set the camera position (View matrix) Matrix.setLookAtM(mVMatrix, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f); // Calculate the projection and view transformation Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix
0 2024-01-27
编程技术问答社区
适当的矩阵乘法用于旋转/平移
为了旋转/翻译对象(仅旋转围绕z轴和仅在xy平面中旋转)不仅是w.r.t到全球中心(设备中心),还要旋转其他任意点,我创建了一个正确的算法(这是正确的(因为我都认为所有高级编码员都认为正确),所以 在实施中需要大量时间删除不需要的翻译(算法是在8月4日创建的并于同一天实施,从那以后,该代码已修改了15次). 这是实施 产生不希望的翻译的代码线在内部: private static void updateModel(int upDown, float xAngle, float yAngle, float zAngle) { 并在下面列出: Matrix.multiplyMV(GLES20Renderer._uBodyCentreMatrix, 0, GLES20Renderer._ModelMatrixBody, 0, GLES20Renderer._uBodyCentre, 0); objX = GLES20Renderer._uBodyCentreMat
0 2024-01-27
编程技术问答社区
快速SVD算法
我正在寻找快速库来计算Java中的SVD(单数值分解). 我已经尝试了一些我发现的Libs,并且已经完成了一些基准测试(值显示了我的基准运行的平均时间...)这不是真正有效的基准,但是对我需要处理的数据进行了测试,对我来说足够了.. ujmp -156 603ms Commons Math Math -183 877MS colt -203 866MSM jblas - 慢速... 我真的不希望找到比JAMA更快的东西,但是我可以尝试一下...您能推荐我其他一些图书馆吗?谢谢! 编辑: 我找到了一个不错的页面带有线性代数libs的基准,所以我猜结论一下这个问题... ejml 看起来很有希望... 解决方案 我找到了此页面具有基准标准 libs,所以我想这是一个问题... ejml看起来很有希望...我找到了一个不错的页面,该页面具有线性代数libs的基准,所以我想这是这个问题... ejml 看起来真的很好,它在我的数据上的工作速度几乎比jama快2倍...
2 2024-01-23
编程技术问答社区
Numpy可以替换这些列表综合以使其运行速度更快吗?
可以更快地完成此矩阵数学吗? 我正在使用Python来呈现3D点.速度很重要,因为它会直接转化为在线下方的框架速率. 我尝试使用numpy函数,但我无法清除两个讨厌的列表综合.我程序的运行时间中有90%是在列表综合的过程中,这是有道理的,因为它们包含所有数学,所以如果可能的话,我想找到更快的方法. 第一个列表理解是在制作pos时发生的 每个单独行的总和和矩阵乘法 vert_array 第二个,persp,乘以x和y值的x和y值 每行基于该特定行的z值. 可以用numpy的东西替换这些列表综合吗?我读到了有关numpy.einsum和numpy.fromfunction的信息,但是我努力理解它们是否与我的问题相关. 这是进行主要渲染计算的函数: 我想更快地制作pos和persp: import time from random import randint import numpy as np def render_all_verts(vert
2 2024-01-23
编程技术问答社区
如何确定MATLAB使用哪些例程来解决稀疏矩阵的问题?
我正在尝试求解形式的稀疏矩阵方程 a * x = b ,其中 a 是已知的正方形,稀疏矩阵, b 是已知的列向量, x 是要确定的列矢量.用于解决此问题的标准MATLAB语法是: x = A\b; 在幕后,\运算符是"使用任何算法似乎最好求解该方程式的算法".因此,MATLAB选择它认为是一种最佳算法,用于求解方程并使用该算法解决方程系统. 过去,这种单符号工作的方法对我来说非常有用,但我需要知道哪种算法被用来解决我的方程式.有人知道我怎么能找到这个吗?也许有一种方法告诉M​​ATLAB打印任何/所有/所有功能,并带有嵌套呼叫的凹痕? 解决方案 我想您会从matlab forum help spparms spparms - Set parameters for sparse matrix routines This MATLAB function sets one or more of the tunable parameters used in
0 2024-01-23
编程技术问答社区
在二进制矩阵中准确找到k列,使这些列的总和为1-向量的快速算法
假设我有一个(m x n)二进制矩阵,其中m和n都可以很大.我想找到准确的k列(k相对较小,少于10),这样这些k列的总和是1矢量(所有元素均为1).一种解决方案是足够的.是否有快速算法? 例如,在矩阵上工作的算法 1 0 0 1 0 0 1 1 0 0 1 1 带有k = 2的 应返回列0和2,但如果k = 1或k = 3. ,则不应报告解决方案 我尝试了两种方法: 我尝试全部(n选择k)组合的慢组合方法,并找到总和到1矢量的组合.这在O(n^k)时间中运行,这显然是可怕的. 一种递归方法,它更快,但仍在O(n^k)最差的时间中运行. Python代码如下: import numpy as np def recursiveFn(mat, col_used_bool, col_sum_to_date, cols_to_go): N = len(mat) if cols_to_go == 1: col_unused =
0 2024-01-23
编程技术问答社区
通过添加标准基础上的向量,构建一个全等级矩阵
我有一个NXN单数矩阵.我想在此矩阵中添加k行(必须来自标准基础e1,e2,...,en),以使新的(n+k)xn矩阵是完整的列等级.只要k是最小的,添加行k的数量必须是最小的,并且可以按任何顺序添加(不仅是e1,e2,...,可以是e4,e10,e1,...). 有人知道这样做的简单方法吗?任何帮助都将不胜感激. 解决方案 您可以通过做 QR QR分解,列列con然后取置换矩阵的最后一个n-rank(A)列的转置. 在MATLAB中,这是通过qr函数实现的(请参阅Matlab文档r=rank(A); [Q,R,E]=qr(A); newA=[A;transpose(E(:,end-r+1:end))]; 每行transpose(E(:,end-r+1:end))将是标准基础的成员,等级为n,这也是您需要这样做的标准基础的最小数量. 这是这样的工作方式: QR分解与列枢轴的分解是将矩阵A分解为产品的标准过程: a*e == q*r 其中q是正交矩阵
0 2024-01-23
编程技术问答社区
在有平等约束的情况下求解线性程序
我问了一个问题,可以在这里找到: 计算最佳组合 并被建议进行线性编程.我查找了线性编程和单纯形方法.但是我遇到的所有示例都具有不平等约束,这些约束使用松弛变量转换为平等.然后,单纯形方法可以互换基本和非基本变量以获得最佳解决方案. 但我的问题是: 最小化: x1 + x2 + ... + xn 约束: a1*x1 + a1*x2 + a1*x3 + ... + a1*xn = c1; a2*x1 + a2*x2 + a2*x3 + ... + a2*xn = c2; a3*x1 + a3*x2 + a3*x3 + ... + a3*xn = c3; 现在,我不知道如何在此处应用单纯形方法,因为我在这里没有任何基本变量. 我也不能仅仅因为n变量和3个方程而求解线性方程. 有人可以在这里建议我一个出路吗? 解决方案 您可以将每个方程式重写为两个不等式: a1*x1 + a1*x1 + a1*x3 + … + a1*xn ≤ c1 a1
0 2024-01-23
编程技术问答社区
矩阵,与给定的矢量形成正交基础
线性代数问题; 给定一个k-variate规范的向量u(即u:|| u || _2 = 1) 您如何构建\ gamma_u,任何任意k*(k-1) 单位向量的矩阵,使得(u,\ gamma_u)形成一个 正交基础? 我的意思是:从计算的立场角度来看: 您使用什么算法来构建此类矩阵? 预先感谢 解决方案 幼稚的方法是应用u_0的革兰氏链正交化,而K-1随机生成的向量.如果在某个时候GS算法生成零向量,则您具有线性依赖性,在这种情况下再次选择向量. 然而,此方法是不稳定的,在向量表示中的小数值错误被放大.但是,存在该算法的稳定修改: 让a_1 = u, a_2,...a_k随机选择向量 for i = 1 to k do vi = ai end for for i = 1 to k do rii = |vi| qi = vi/rii for j = i + 1 to k do rij =
0 2024-01-23
编程技术问答社区
达姆算法的替代基表
DAMM算法对于处理检查数字很棒: https://en.wikipedia.org/wiki/wiki/wiki/damm_algorithm 我想将其用于应用程序的两个不同实体.但是,他们不应具有相同数字的支票数字. 因此,我必须为每个实体使用不同的基础表.基台是一个完全反对称的准群,n = 10. 示例来自 |0 1 2 3 4 5 6 7 8 9 -+------------------- 0|0 3 1 7 5 9 8 6 4 2 1|7 0 9 2 1 5 4 8 6 3 2|4 2 0 6 8 7 1 3 5 9 3|1 7 5 0 9 8 3 4 2 6 4|6 1 2 3 0 4 5 9 7 8 5|3 6 7 4 2 0 9 5 8 1 6|5 8 6 9 7 2 0 1 3 4 7|8 9 4 5 3 6 2 0 1 7 8|9 4 3 8 6 1 7 2 0 5 9|2 5 8 1 4 3 6 7 9 0 我如何生成第二个,这是不同的,但也是n
4 2024-01-23
编程技术问答社区
好的线性代数包
我正在为项目实施一些光谱图算法.其中很大一部分是找到大型稀疏矩阵的特征值和特征向量,以及倍增矩阵. 我的问题是,这样做的最快库是什么?我一直在寻找python或jama for Java的Numpy.这些好,还是有更好的东西? 谢谢. 解决方案 首先,您需要准确指定需要执行哪些矩阵操作.原因是一些图书馆在一些特殊操作方面非常出色.例如,Arpack擅长找到大型稀疏基质的最大特征值. (请参阅上面的问题) ,但总的来说,numpy/scipy是一个不错的选择.它包装了几个库,例如Lapack,Arpack和Superlu,它为您提供了一个不错的python界面. 另外,您可以使用八度或MATLAB或使用C ++来包装专门用于您需要执行的操作的库. jama是为密集的矩阵而建造的,您想与稀疏的矩阵一起工作,因此Jama对您来说是一个不好的选择. http://math.nist.gov/javanumerics/jama/jama/ 编辑: 我不是
2 2024-01-23
编程技术问答社区
完成一个损坏的数据矩阵的算法
我有以下问题: 我提取了一组数据,但这些数据的一部分是不可用的,要么丢失了.对于不同的项目,我确定了10个参数: param1 param2 ... param10 Item 1 1220 N/A 1000 Item 2 1300 200 ... 1000 .. ... ... item N N/A 1000 ... 200 N ~ 1500 and half of the values are complete 项目的创建有一个隐式逻辑,因此我想以最佳的期望值填写这些值. 示例: 让我们想象您有2个参数和3个项目. param1 param2 item1 400 200 item2 200 100 item3 100 N/A 使用线性插值,您可以轻松获得i
0 2024-01-23
编程技术问答社区
沿着两个平面的交点寻找直线
我正在尝试绘制由3D中两架飞机的交叉点形成的线,但是我很难理解数学,这已经解释了在这里和在这里.. 我试图自己弄清楚它,但是我到达解决方案的最接近的是沿着与交叉路口相同方向的向量,它使用平面的跨产品.我不知道如何在交叉路口上找到一个点,任何要点都会做到.我认为这种方法是一个死胡同.这是此尝试的屏幕截图: 我试图使用一个>问题,但它具有与原始解释的链接,并且方程对我不起作用(它具有不平衡的括号,我在下面尝试更正). var planeA = new THREE.Plane((new THREE.Vector3(0, 0, 1)).normalize(), 100); var planeB = new THREE.Plane((new THREE.Vector3(1, 1, 1)).normalize(), -100); var x1 = planeA.normal.x, y1 = planeA.normal.y, z1 = planeA.normal.z
4 2024-01-23
编程技术问答社区
倒置协方差矩阵的马哈拉诺比斯距离
我正在编写一个功能,以在两个向量之间占据马哈拉诺邦的距离.我知道这是使用方程A'*c^-1*b实现的,其中A和B是向量,C是协方差矩阵.我的问题是,有没有有效的方法可以在不使用高斯 - 约旦消除的情况下找到矩阵的倒数,还是没有办法解决这个问题?我正在寻找一种自己做这个的方法,而不是使用任何预定义的功能. 我知道C是一个隐性的,积极的确定矩阵,所以有什么方法可以算法利用这一事实?还是有一些巧妙的方式计算Mahalanobis距离,而没有计算协方差的倒数?任何帮助将不胜感激. ***编辑:上面的Mahalanobis距离方程不正确.它应该是 x'*c^-1*x其中x =(b-a),而b和a是我们要找到的距离的两个向量(感谢lrpurser).因此,所选答案中提出的解决方案如下: d = x'*b,其中b = c^-1*x C*B = X,因此使用LU分解或LDL'分解求解B. 解决方案 您可以(应该!使用分解的矩阵:求解C x = b比计算C^-1的数字属性更好,并
0 2024-01-23
编程技术问答社区
线性代数是如何在算法中使用的?
我的几个同龄人提到"线性代数"在研究算法时非常重要.我研究了各种算法,并参加了一些线性代数课程,但我看不到该连接.那么算法中如何使用线性代数? 例如,与图形的连接矩阵可以有哪些有趣的事情? 解决方案 三个具体示例: 线性代数是现代3D图形的基础.这本质上与您在学校学到的东西一样.数据保存在投影在2D表面的3D空间中,这是您在屏幕上看到的. 大多数搜索引擎基于线性代数.这个想法是将每个文档表示为超空间中的向量,并查看向量在此空间中如何相互关系.这是由 Lucene Project 等.参见 vsm . . 某些现代压缩算法,例如OGG Vorbis格式使用的算法是基于线性代数,或更具体地说是一种称为向量量化. 基本上,这取决于以下事实:在处理多个变量时,线性代数是一种非常有力的方法,并且在设计算法时将其用作理论基础有很大的好处.在许多情况下,这个基础并不像您想象的那样出现,但这并不意味着它不存在.您很有可能已经实施了算法,而没有linalg,这将是难以置信的.
0 2024-01-23
编程技术问答社区
寻找附近点的算法?
给出了X,Y坐标的数百万分,快速从一个位置找到最接近的1000点的首选算法是什么? "快速"这里意味着在家用计算机上大约100毫秒. 蛮力将意味着进行数百万个乘法,然后对它们进行排序.尽管即使是一个简单的Python应用程序也可以在不到一分钟的时间内完成,但对于交互式应用程序仍然太长了. 将知道这些点的边界框,因此可以将空间划分为简单的网格.但是,这些点的分布有些不均匀,所以我怀疑大多数网格正方形会是空的,然后突然其中一些将包含很大一部分. 编辑:不必精确,实际上可能是不准确的.如果前1000位实际上只是前2000年的一些随机点,那将没什么大不了的. 编辑:一组点很少更改. 解决方案 使用 quadtree ? 将面积分为矩形,如果区域的点较低,矩形很大,并且如果区域的点高密度,则矩形将很小.您将每个矩形递归细分至四个子矩形,直到矩形足够小或包含足够的点为止. 然后,您可以开始查看位置附近矩形的点,然后向外移动,直到找到1000分. 代码
4 2024-01-23
编程技术问答社区
寻找科赫曲线的坐标
对不起我的语言,因为英语是我的第二语言. 我试图将一条直线转换为称为科赫曲线的分形. 给出了直线的2个点,然后我需要创建Koch曲线,在该曲线将线划分为3个段,然后将第二个节作为等边三角形. 请参阅 http://www.tgmdev.be/curvevonkoch.php 到目前为止,我们将直线转换为4个均等段,我需要找出科赫曲线的所有坐标. 当2分的y坐标相同时,我想到了一条直线,这给了我水平的线路.如果是这样,我可以通过将第二部分半部分和右三角形的cos(60)划分为等边三角形的3点. 如这里: http://www.themathpage.com/atrig/atrig/30-60-90 -triangle.htm 我的问题是如何在斜线是对角线时找到所有坐标,例如A(200,100),B(400,600)或A(400,500),B(100,500). . 解决方案 如果您的基本段为AB,则A(AX,AY)和B(BX,BY),则4个子细分将为 AP,PQ,QR
0 2024-01-23
编程技术问答社区
最快的矩阵求逆方法
我想处理具有反函数和很多功能的图像.对于代码迅速运行 double cvInvert(const CvArr* src, CvArr* dst, int method=CV_LU) 选择最佳枢轴元素的CV_LU高斯消除 CV_SVD单数值分解(SVD)方法 CV_SVD_SYM SVD方法用于对称阳性定义的矩阵. 解决方案 在OpenCv2.x中,有一个称为Mat::inv(int method)的新接口来计算矩阵的倒数.请参阅参考.. c ++:matexpr mat :: inv(int method = decomp_lu)const 参数: 方法 - Matrix inversion method. Possible values are the following: DECOMP_LU is the LU decomposition. The matrix must be non-singular. DE
0 2024-01-23
编程技术问答社区
加权最小平方拟合平面和三维点集
我将平面拟合到具有最小平方方法的3D点设置.我已经有算法可以做到这一点,但是我想对其进行修改以使用加权最少的正方形.这意味着我对每个点都有一个重量(重量越大,平面应该越接近点). 当前算法(无重量)看起来像这样: 计算总和: for(Point3D p3d : pointCloud) { pos = p3d.getPosition(); fSumX += pos[0]; fSumY += pos[1]; fSumZ += pos[2]; fSumXX += pos[0]*pos[0]; fSumXY += pos[0]*pos[1]; fSumXZ += pos[0]*pos[2]; fSumYY += pos[1]*pos[1]; fSumYZ += pos[1]*pos[2]; } 比制作矩阵: double[][] A = { {fSumXX, fSumXY, fSumX},
6 2024-01-23
编程技术问答社区