Articles of 交集

给定公式的两条线的交点

我有以下公式来检查两个线段的交集: Edge is defined like point2-point1 vector. bool intersects(const Line2D& line2) { float s, t; s = (-edge.y * (point1.x – line2.point1.x) + edge.x * (point1.y – line2.point1.y)) / (-line2.edge.x * edge.y + edge.x * line2.edge.y); t = (line2.edge.x * (point1.y – line2.point1.y) – line2.edge.y * (point1.x – line2.point1.x)) / (-line2.edge.x * edge.y + edge.x […]

射线多边形交集

嗨,我正在寻找一个优雅的方式来做2D射线和多边形交集。 我不在乎语言。 现在我正在做的是在射线(屏幕长度)上testing一条线,并testing这个导出射线与多边形中每个连续顶点所形成的所有线之间的线与线交点。 就目前而言,即使我不知道光线的哪些部分在多边形的内部或外部(如果是凹面的),这也是好的。 但是现在我不需要这些信息,即使是一般的方法也可以。 我不关心自相交多边形。 有什么建议? 也许三角形的多边形可能是一个想法?

如何计算射线多边形交集?

我正在上课,我们正在用C ++创建一个光线追踪器。 我正处在一个我无法用计算光线与一个多边形相交的点所需的math计算方法。 我们对如何做到这一点有一些指导,但所有的课堂教材以及我的Googlesearch都没有帮助。 这些是我们必须完成的function: bool polygon::Intersect(const ray &R, intersection &inter) { // To Do: If you have implemented the "CalculateNormal" method // below, should already be calculated and placed in the member // "n". // // Now, using n, you need to calculate the intersection of the // ray with the plane containing the […]

粗略的结果从射线平面相交代码

我已经使用C ++和OpenGL设置了一个简单的第一人称控件的演示,它似乎工作得很好。 我的目标是这样的:当玩家看一架飞机并点击鼠标左键时,用一架飞机画一条射线指向玩家面对玩家位置的方向。 所以,我从两个Vector, Vector position和Vector rotation ,其中Vector是一个相当标准的三维vector类: class Vector { public: GLfloat x, y, z; Vector() {}; Vector(GLfloat x, GLfloat y, GLfloat z) { this->x = x; this->y = y; this->z = z; } GLfloat dot(const Vector &vector) const { return x * vector.x + y * vector.y + z * vector.z; } … […]

XNA用给定的Z来计算两个三角形的点

我想计算具有指定Z坐标的3D三角形的两点。 我想这样做的方式是以某种方式创建一个与我的给定Z坐标完全平坦的平面,然后计算三角形与它相交的位置(或者这是错误的)。 如果你知道如何做到这一点,请帮助。 我已经search,但还没有真正发现任何似乎工作。

错误的交叉点:Bounding Sphere和Ray

XNA中的BoundingSphere和Ray s有一个很大的问题,我真的不知道如何解决这个问题。 问题: foreach (BoundingSphere s1 in GetCollisionHullBoundingSpheres()) if (ray.Intersects(s1) != null) { System.Console.WriteLine("Sphere: " + s1.Center + " Radius: " + s1.Radius); System.Console.WriteLine("Ray: " + ray.Position + " Direction: " + ray.Direction); System.Console.WriteLine("Ray: " + ray.Intersects(s1).Value + "\n"); return true; } 碰撞包围球是网格中的球体,射线是通过使用playerposition和vector(0,-5,0)作为方向来计算的。 这是输出: Sphere: {X:-16,52211 Y:-3,34731 Z:-15,66445} Radius: 5,077909 Ray: {X:75,29767 Y:29,15445 Z:-45,73476} Direction: […]

这是检测射线球面相交的正确方法吗?

我有这个java函数应该返回true或false的任何传递给它的球体,如果它们相交。 然而,在很多情况下,如果它不应该是真的,而且有时候是错误的,那么它似乎就结束了。 但是,我可能会传递不正确的数据给函数。 这是用jPCT完成的,所以SimpleVector对象是一个包含3个variables的向量。 public Boolean sphereIntersect(SimpleVector rayOrigin,SimpleVector rayDirection, SimpleVector sphereOrigin, float sphereRadius ) { SimpleVector Q = new SimpleVector(sphereOrigin); Q.sub(rayOrigin); float c = sphereOrigin.length(); float v = Q.calcDot(rayDirection); float d = sphereRadius*sphereRadius – (c*c – v*v); if (d < 0.0){ System.out.println("False"); return false; } System.out.println("True"); return true; }

我应该在世界还是物体空间进行交叉testing?

我为我的游戏添加了基本的光线投射和碰撞检测,并添加了边界体积和碰撞网格。 射线投射在世界空间中,每个网格的节点可以跟踪其世界变换。 考虑到我想testing射线和边界体积之间的交集,以及与其他边界体积的边界体积,我应该在什么空间进行交叉testing? 我想到的情景是: 将光线转化为物体的局部空间,执行testing,然后对结果点进行逆变换。 将边界体积转换为世界空间并在那里执行,还是应该始终将边界体积保持在世界空间中? 在世界空间或其中一个对象中执行边界/边界testing? 在使用空间的静态和dynamic碰撞之间,事情会发生什么变化?

物理学曲边?

我正在学习如何使用SFML在C ++中编写简单的二维游戏,我已经完成了一个相对简单的乒乓游戏,我想问一下如何创建一个曲面边缘的物理效果曲棍球表如: 我是否必须为每个单独的点编写一个xVelocity / yVelocitytypes的reflection? 我怎样才能添加一个像这样的曲线边缘呢?

在地形上给出X和Y坐标的Z?

我需要知道在地形上给定X和Y坐标的最有效的方法。 我的地形设置为网格,每个网格块由两个三角形组成,可以向任何方向翻转。 我想把游戏对象平稳地沿着地面移动,而不是“踩踏”。 我目前正在使用下面的方法意想不到的结果: double mapClass::getZ(double x, double y) { int vertexIndex = ((floor(y))*width*2)+((floor(x))*2); vec3ray ray = {glm::vec3(x, y, 2), glm::vec3(x, y, 0)}; vec3triangle tri1 = { glmFrom(vertices[vertexIndex].v1), glmFrom(vertices[vertexIndex].v2), glmFrom(vertices[vertexIndex].v3) }; vec3triangle tri2 = { glmFrom(vertices[vertexIndex+1].v1), glmFrom(vertices[vertexIndex+1].v2), glmFrom(vertices[vertexIndex+1].v3) }; glm::vec3 intersect; if (!intersectRayTriangle(tri1, ray, intersect)) { intersectRayTriangle(tri2, ray, intersect); } return intersect.z; } intersectRayTriangle()和glmFrom()如下所示: bool […]