原文:https://blog.csdn.net/zhouschina/article/details/8784908 已知三点p1(x1,y1,z1),p2(x2,y2,z2),p3(x3,y3,z3),要求确定的平面方程。 关键在于求出平面的一个法向量,为此做向量p1p2(x2-x1,y2-y1,z2-z1), p1p3(x3-x1,y3-y1,z3-z1),平面法线和这两个向量垂直,因此法向量n: 平面方程: a * (x - x1) + b * (y - y1) + c * (z - z1) = 0; d = -a * x1 - b * y1 - c * z1; 平面方程2: a * x + b * y + c * z + d=0; 代码: //已知3点坐标,求平面ax+by+cz+d=0; void get_panel(Point p1, Point p2, Point p3, double &a, double &b, double &c, double &d) { a = ( (p2.

Continue reading

算法1 原文:https://blog.csdn.net/zhouschina/article/details/14647587 假设空间某点O的坐标为(Xo,Yo,Zo),空间某条直线上两点A和B的坐标为:(X1,Y1,Z1),(X2,Y2,Z2),设点O在直线AB上的垂足为点N,坐标为(Xn,Yn,Zn)。点N坐标解算过程如下: 首先求出下列向量: 由向量垂直关系(公式1): 点N在直线AB上,根据向量共线(公式2): 由公式2得(公式3): 把公式3式代入公式1式,式中只有一个未知数k,整理化简解出k(公式4): 把公式4式代入公式3式即得到垂足N的坐标。 二维空间 // 二维空间点到直线的垂足 struct Point { double x,y; } Point GetFootOfPerpendicular( const Point &pt, // 直线外一点 const Point &begin, // 直线开始点 const Point &end) // 直线结束点 { Point retVal; double dx = begin.x - end.x; double dy = begin.y - end.y; if(abs(dx) < 0.00000001 && abs(dy) < 0.00000001 ) { retVal = begin; return retVal; } double u = (pt.

Continue reading

[Math]Parabola movement

keywords:抛物运动、Parabola、重力加速度、Gravitational Speed 、UE4 implement. header AStaticMeshActor* TestCube = nullptr; //throw speed UPROPERTY(EditDefaultsOnly) FVector StartForce = FVector(100.f, 100.f, 2000.f); //gravitational acceleration float GravityAcclerator = -980.f; //accumulated movtion time float AccumulateTime = 0.f; cpp void ATestTPGameMode::StartPlay() { Super::StartPlay(); //finding the Actor in scene. for (TActorIterator<AStaticMeshActor> Iter(GetWorld()); Iter; ++Iter) { if (Iter->GetName() == TEXT("Cube_2")) { TestCube = *Iter; break; } } } void ATestTPGameMode::Tick(float DeltaSeconds) { Super::Tick(DeltaSeconds); AccumulateTime += DeltaSeconds; //calculate gravitational speed in real time.

Continue reading

格拉姆-施密特正交化 https://zh.wikipedia.org/wiki/%E6%A0%BC%E6%8B%89%E5%A7%86-%E6%96%BD%E5%AF%86%E7%89%B9%E6%AD%A3%E4%BA%A4%E5%8C%96 内积空间 https://zh.wikipedia.org/wiki/%E5%86%85%E7%A7%AF%E7%A9%BA%E9%97%B4 标准正交基 https://zh.wikipedia.org/wiki/%E6%A0%87%E5%87%86%E6%AD%A3%E4%BA%A4%E5%9F%BA 子空间 https://zh.wikipedia.org/wiki/%E5%AD%90%E7%A9%BA%E9%96%93 豪斯霍尔德变换 https://zh.wikipedia.org/wiki/%E8%B1%AA%E6%96%AF%E9%9C%8D%E5%B0%94%E5%BE%B7%E5%8F%98%E6%8D%A2 吉文斯旋转 https://zh.wikipedia.org/wiki/%E5%90%89%E6%96%87%E6%96%AF%E6%97%8B%E8%BD%AC

Continue reading

If we want to throw a projectile as far as possible, at what angle should it be launched? This paper focuses on how the answer to this question changes depending on the situation. 如果你想尽可能远的抛掷物体,以多大的角度抛出最合适?这篇文章用于分析不同测试环境下而导致的不同答案。 论文地址:Projectile Motion: Finding the Optimal Launch Angle https://www.whitman.edu/Documents/Academics/Mathematics/2016/Henelsmith.pdf

Continue reading

共轭矩阵 http://baike.baidu.com/item/%E5%85%B1%E8%BD%AD%E7%9F%A9%E9%98%B5 逆矩阵 http://baike.baidu.com/item/%E9%80%86%E7%9F%A9%E9%98%B5 复矩阵 http://baike.baidu.com/item/%E5%A4%8D%E7%9F%A9%E9%98%B5 目察秋毫之末,耳不闻雷霆之声;耳调玉石之声,目不见太山之高。---《淮南子》

Continue reading

[Math]矩阵乘法

矩阵乘法 http://baike.baidu.com/view/2455255.htm 矩阵乘法 http://www.cnblogs.com/DreamUp/archive/2010/07/27/1786225.html 目察秋毫之末,耳不闻雷霆之声;耳调玉石之声,目不见太山之高。——《淮南子》

Continue reading

讲之前,先说下如果两个Rotation相加的意义,比如: FRotator Rot1(0.f, 90.f, 0.f); FRotator Rot2(90.f,0.f, 0.f); FRotator Result = Rot1 + Rot2; 得到的结果FRotator Result(90.f, 90.f, 0.f),其意义是: 物体相对空间坐标原点的Rotation为(90.f, 90.f, 0.f),很好理解。 如果两个Rotation转换为Martix并相乘,比如: FRotator Rot1(0.f, 90.f, 0.f); FRotator Rot2(90.f,0.f, 0.f); FRotator Result =( FRotationMatrix(Rot1) * FRotationMatrix(Rot2)).Rotator; 得到的结果FRotator Result(0.f, 90.f, 90.f),其意义是: 先将物体作Rot1旋转,即:Yaw方向(水平平面)旋转90度,然后再假设该物体相对坐标轴原点的旋转量为(0, 0, 0),即没有作任何旋转,但实际Rotation相对坐标轴原点为(0, 90, 0);然后再将物体进行Rot2旋转,即Pitch方向(垂直于(90, 0, 0)方向的平面)侧翻90度,因为侧翻90度前假设物体的Rotation是(0, 0, 0),所以侧翻时所在的平面不再是Yaw=90的平面(垂直于(0, 90, 0)方向),而是Yaw=0的平面(垂直于(90, 0, 0)方向)。没做相关配图,这段话理解起来有点绕,最好用空间思维想象下,可以用手掌比划。 实际应用: 比如空间中有两个物体:A和B,现在要将A旋转至与B相同的朝向,目前只知道A的相对世界坐标的Rotation Rw(90.f,0.f, 0.f)、B相对A(将A的Rotation当做(0, 0, 0))的Rotation Rr(0.f, 90.f, 0.f),求A旋转后的世界坐标Rotation。 此时的计算公式就是: (FRotationMatrix(Rr) * FRotationMatrix(Rw)).Rotator() 注意:矩阵相乘时,两个乘数的前后位置不同则计算的结果也不同,比如上面例子,如果是( FRotationMatrix(Rot2) * FRotationMatrix(Rot1)).

Continue reading

什么是“齐次”,“非齐次”,“线性”,“非线性”? https://www.zhihu.com/question/19816504 齐次坐标和矩阵变换 http://www.cnblogs.com/lizhengjin/archive/2010/11/07/1871055.html 计算机图形学:求齐次坐标变换矩阵 https://zhidao.baidu.com/question/132223547.html HOMOGENEOUS TRANSFORMATION MATRICES http://www.silcom.com/~barnowl/HTransf.htm 天道何亲,惟德之亲;鬼神何灵,因人而灵。---刘基《司马季主论卜》

Continue reading

The Mathematics of the 3D Rotation Matrix https://www.fastgraph.com/makegames/3drotation/ How to combine rotation in 2 axis into one matrix http://computergraphics.stackexchange.com/questions/1608/how-to-combine-rotation-in-2-axis-into-one-matrix Rotation matrix https://en.wikipedia.org/wiki/Rotation_matrix 云山苍苍,江水泱泱,先生之风,山高水长。---范仲淹《严先生祠堂记》

Continue reading

点在多边形内的判别方法 int pnpoly(int nvert, float *vertx, float *verty, float testx, float testy) { int i, j, c = 0; for (i = 0, j = nvert-1; i < nvert; j = i++) { if (((verty[i] > testy) != (verty[j] > testy)) && (testx < (vertx[j] - vertx[i]) * (testy - verty[i]) / (verty[j] - verty[i]) + vertx[i]) ) { c = !c; } } return c; } Arguments

Continue reading

Author's picture

Neil Wang

久长唯有品格

To Be Marvelous

Yichang·Hubei