矢量与圆锥的交点

2024-01-08

我有一个向量A定义为 :(Ao+t*Ad)

我还有一个带有顶点的圆锥体(圆锥尖)V,轴方向D,基半径R和身高H.

如何找到向量和圆锥之间的交点?我正在使用 glm 进行数学计算。

Here's a simple illustration: enter image description here


我没有处理光线与圆锥体相交的所有情况,例如光线是否位于圆锥体上或光线与圆锥体相切,因为在我的情况下没有必要,但这是我最终得到的解决方案:

std::array<glm::vec3,2> getLine2ConeIntersection(const glm::vec3 &ap_,const glm::vec3 &ad_ , const glm::vec3 &coneBaseCntr_,const glm::vec3 &coneVertex_,float coneRadius_) const
{
    std::array<glm::vec3,2> pois;
    glm::vec3 axis = (coneBaseCntr_-coneVertex_);
    glm::vec3 theta = (axis/glm::length(axis));
    float m = pow(coneRadius_,2)/pow(glm::length(axis),2);
    glm::vec3 w = (ap_-coneVertex_);

    float a = glm::dot(ad_,ad_) - m*(pow(glm::dot(ad_,theta),2)) - pow(glm::dot(ad_,theta),2);
    float b = 2.f*( glm::dot(ad_,w) - m*glm::dot(ad_,theta)*glm::dot(w,theta) - glm::dot(ad_,theta)*glm::dot(w,theta) );
    float c = glm::dot(w,w) - m*pow(glm::dot(w,theta),2) - pow(glm::dot(w,theta),2);

    float discriminant = pow(b,2) - (4.f*a*c);
    if (discriminant >= 0)
    {
        pois[0] = (ap_+static_cast<float>(((-b) - sqrt(discriminant))/(2.f*a))*ad_);
        pois[1] = (ap_+static_cast<float>(((-b) + sqrt(discriminant))/(2.f*a))*ad_);
    }

    return pois;
}

其中 ap_ 是向量上的一个点,ad_ 是它的方向。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

矢量与圆锥的交点 的相关文章

  • GIoU (Generalized Intersection over Union) 详解

    论文 xff1a Generalized Intersection over Union A Metric and A Loss for Bounding Box Regression 官方解读 xff1a Generalized Inte
  • Java中两个List的有效交集?

    问题很简单 我有两个列表 List
  • C# 两组排序数字最快的交集

    我正在应用程序的时间关键部分计算两组排序数字的交集 这个计算是整个应用程序的最大瓶颈 所以我需要加快它的速度 我已经尝试了很多简单的选项 目前正在使用这个 foreach var index in firstSet if secondSet
  • 删除列表中的重复项

    如何检查列表是否有重复项并返回没有重复项的新列表 获取唯一项目集合的常见方法是使用set 套装有无序的的集合distinct对象 要从任何可迭代对象创建集合 您只需将其传递给内置的set 功能 如果您稍后再次需要一个真实的列表 您可以类似地
  • 如何确定矩形何时重叠或相交?

    我找到了如何绘制矩形和一些代码来查找两个矩形何时重叠 但我无法连接这些过程 我有我想要的两个矩形 但无法确定它们是否相交 然后将此信息添加到列表框 这是我的代码 public partial class Form1 Form Graphic
  • 圆 - 线相交无法正常工作?

    我在之后写了这个圆线相交检测http mathworld wolfram com Circle LineIntersection html 但看起来像是这样 或者我错过了一些东西 public static bool Intersect V
  • Slick2D 矩形碰撞检测

    我遇到一个问题 显示一个矩形与另一个矩形发生碰撞 所以我的问题是 如何获得相交方法来检查碰撞 或者说有其他方法来处理这种情况下的碰撞吗 我正在创建一款回合制战斗游戏 类似于 最终幻想 或 龙骑兵传奇 其中玩家的角色位于屏幕的右侧 敌人位于屏
  • Java-多边形和线的交点

    有没有什么函数可以给我一个交点Polygon and Line2D 我有一个多边形和一个我知道相交的线段 我想要交点的实际值而不是布尔答案 给你 有趣的方法是 getIntersections 和 getIntersection 前者解析所
  • Matlab 中的相交体积

    我开发了一个代码 它采用一组 3D 坐标 并执行三角测量来生成凸包 Delaunay 这一切进展顺利 使用 Deluanay 三角测量 我可以使用 tsearchn 测试点是否包含在给定体积中 现在我想取两个这样的 3D 体积 并测试它们是
  • 确定点是否位于 3D 网格内部的算法

    用于确定点是否位于 3D 网格内部的快速算法是什么 为简单起见 您可以假设网格都是三角形并且没有孔 到目前为止我所知道的是 确定光线是否穿过网格的一种流行方法是计算光线 三角形相交的数量 它必须很快 因为我正在使用它进行触觉医学模拟 所以我
  • 测试两条线是否相交 - JavaScript 函数

    我尝试寻找一个 javascript 函数来检测两条线是否相交 该函数将获取每条线 我们将其称为线 A 和线 B 的两个起点的 x y 值 就是如果相交则返回 true 否则返回 false 函数示例 如果答案使用矢量对象 我很高兴 Fun
  • 快速球体与网格相交

    给定一个 3D 网格 一个作为球体中心的 3d 点和一个半径 我想快速计算球体包含或相交的所有单元格 目前 我采用球体的 网格对齐 边界框并计算该边界框的最小和最大点的两个单元格 然后 对于这两个单元格之间的每个单元格 我进行盒球相交测试
  • 在多边形内部随机放置一个多边形

    我有两个多边形定义为一系列 2D 浮点值 不保证它们是凹的或凸的 他们不会超越自己 他们不能旋转 如果可能的话 我想将一个随机放置在另一个内部 主要问题是效率 我必须在几秒钟内执行大约 200 次左右 我已经研究这个问题几天了 但没有取得明
  • 从鼠标坐标到 3d 的点-三角形相交?

    我知道如何测试点和三角形之间的交点 但是我不明白 如何使用鼠标坐标将点的起始位置精确地移动到屏幕平面上 因此点角度应该根据鼠标光标在屏幕上的位置而变化 这也应该起作用完美的是 无论我在 OpenGL 应用程序中使用哪个透视角度 因此不同透视
  • Java中相交重叠区间

    我有一组可能重叠的输入日期范围 我不想组合这些重叠的日期范围 而是想创建具有调整日期的新日期范围 例如 应该最终在 Java 有没有有效的方法来解决这个问题 提前致谢 UPDATE 我在第一个问题中没有提到我自己的方法 所以这里是 我只需获
  • 测量网格之间的距离

    对于我的项目 我需要测量两个 STL 文件之间的距离 我编写了一个脚本 允许读取文件 将它们相对于彼此放置在所需的位置 现在 在下一步中 我需要检查一个物体到另一个物体的距离 库上是否有可用的函数或脚本允许我执行此过程 因为那时我想要定义诸
  • 防止画布对象发生碰撞或交叉

    我正在画布上绘制 n 个矩形 矩形是可拖动和可缩放的 我想防止它们重叠或相交 最好的情况是 如果它们只是相互咬合 我想办法检查一下十字路口 在我的示例中 我将触摸对象的不透明度设置为 0 1 巧合的是 在我尝试解决这个问题时 我的对象在接触
  • 范围交集/并集

    我正在开发一种编程语言 我想为其提供Range数据类型 目前不像通常那样是一个成对的列表int values x y 的约束条件是x lt y 我说不像通常那样 因为通常范围只是一对 但在我的情况下 它超过 例如允许 1 to 5 7 to
  • 根据另一个 DataFrame 选择一个 DataFrame 的列

    我试图根据另一个 DataFrame 的列选择 DataFrame 的子集 数据框看起来像这样 a b c d 0 0 1 2 3 1 4 5 6 7 2 8 9 10 11 3 12 13 14 15 a b 0 0 1 1 2 3 2
  • 具有混合成员类型的通用 TypeScript 接口

    对于几个 HTML 表单 我想配置输入并处理它们的值 我的类型具有以下结构 您可以将其复制到 TypeScript Playgroundhttp www typescriptlang org play http www typescript

随机推荐