计算圆与通过中心的直线的交点

2024-01-25

我如何获得直线和圆的交点..我有很多关于这个主题的信息,但我的要求不匹配..

我得到了一条线,其一个端点位于圆的原点..而另一端位于圆之外的某处..现在我需要这条线和圆的交点..

我尝试使用下面的公式从圆外找到最近的边缘点,但无法破解它 -

closestCirclePoint = function(px, py, x, y, ray){
    var tg = (x += ray, y += ray, 0);
    return function(x, y, x0, y0){return Math.sqrt((x -= x0) * x + (y -= y0) * y);}(px, py, x, y) > ray ?
        {x: Math.cos(tg = Math.atan2(py - y, px - x)) * ray + x, y: Math.sin(tg) * ray + y}
        //{x: (px - x) / (length / ray) + x, y: (py - y) / (length / ray) + y}
        : {x: px, y: py};
};

有什么办法可以解决这个问题..?? 提前致谢!


Lindenhovius 答案的 JavaScript 版本如下所示:

/**
 * Finds the intersection between a circles border 
 * and a line from the origin to the otherLineEndPoint.
 * @param  {Vector} origin            - center of the circle and start of the line
 * @param  {number} radius            - radius of the circle
 * @param  {Vector} otherLineEndPoint - end of the line
 * @return {Vector}                   - point of the intersection
 */
function findIntersect (origin, radius, otherLineEndPoint) {
    var v = otherLineEndPoint.subtract(origin);
    var lineLength = v.length();    
    if (lineLength === 0) throw new Error("Length has to be positive");
    v = v.normalize();
    return origin.add(v.multiplyScalar(radius)); 
}

但是你需要自己实现向量“类”*:

function Vector (x, y) {
    this.x = x || 0;
    this.y = y || 0;
}

Vector.prototype.add = function (vector) {
    return new Vector(this.x + vector.x, this.y + vector.y);
};

Vector.prototype.subtract = function (vector) {
    return new Vector(this.x - vector.x, this.y - vector.y);
};

Vector.prototype.multiply = function (vector) {
    return new Vector(this.x * vector.x, this.y * vector.y);
};

Vector.prototype.multiplyScalar = function (scalar) {
    return new Vector(this.x * scalar, this.y * scalar);
};

Vector.prototype.divide = function (vector) {
    return new Vector(this.x / vector.x, this.y / vector.y);
};

Vector.prototype.divideScalar = function (scalar) {
    return new Vector(this.x / scalar, this.y / scalar);
};

Vector.prototype.length = function () {
    return Math.sqrt(Math.pow(this.x, 2) + Math.pow(this.y, 2));
};

Vector.prototype.normalize = function () {
    return this.divideScalar(this.length());
};

*JavaScript 中没有真正的类——只是构造函数 https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor and 原型 https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Object/prototype,随着 ES6 的出现,事情发生了变化,但那是另一个话题了。

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

计算圆与通过中心的直线的交点 的相关文章

随机推荐

  • C、跳过初始化静态数组

    有没有办法指示 gcc 跳过某些静态 易失性变量的初始化 我有几个循环缓冲区 声明为易失性 实际上不需要在启动时归零 在我的 MCU 上 这浪费了大约 2500 tcy 提前致谢 如果你使用gcc 您可以将数组对象放入 noinit部分 u
  • Powermock junit5 和mockito2.x 不工作 RunnerTestSuiteChunker 未找到

    我正在使用 mokito 2 0 Junit 5 运行 powermock 并为具有 maven surefire plugin 的 Junit 4 运行 powermock 测试类看起来像 import org junit Before
  • 使用 C# 代码下载的 zip 文件无效

    我有一个存储一些 zip 文件的 Dot Net MVC 服务器 如果单击超链接 我就可以成功下载这些 zip 文件 但是 如果我尝试使用 WebClient 的 DownloadFile 下载 zip 文件 我可以下载 zip 文件 但收
  • 如何基于多索引映射向 DataFrame 添加列

    我有一个数据框df如下 df head 10 TYPE A B 0 0 5 25 1 1 7 23 2 5 10 43 3 1 5 37 4 2 4 61 5
  • 通过 Javascript 访问 Google 地图叠加层中的 KML 地标?

    我使用 GGeoXml 对象在嵌入式 Google 地图上覆盖了 KML 文件 我希望能够从 Javascript 访问 KML 文件中的特定地标 例如 突出显示地图上选定的多边形以响应用户操作 理想情况下 我想做的是这样的 伪代码 geo
  • 如何覆盖嵌入式 Google 地图中 KML 弹出窗口中的 target=_blank?

    我正在使用 KML 在 Google 地图上叠加形状 与每个形状相对应的信息包含在
  • GAE:如何获取斑点图像高度

    给出了 GAE 上的以下模型 avatar db BlobProperty 通过调用图像实例属性 height 或 width 查看文档 http code google com appengine docs python images i
  • 如何在 select2 插件中设置选择值 - jquery

    我使用此代码将数据插入到select元素与select2 plugin ajax type POST url ws asmx GetEvrakGrup data contentType application json charset ut
  • 从 varchar(max) 列中选择 XML

    我在 SQL Server 2005 上的 varchar max 列中存储了一些 XML 数据 数据采用以下形式 FQTN 完全限定类型名称
  • ConfigureWebHostDefaults 和ConfigureWebHost 方法之间有什么区别?

    我在通用主机构建器类上看到了 2 个几乎相同的扩展方法 HostBuilder ConfigureWebHostDefaults and ConfigureWebHost 它们具有相同的签名并位于不同的程序集中 我看见ConfigureWe
  • 如何通过 VBA 函数填充 Excel 工作表中的单元格?

    我只想通过 VBA 函数填充电子表格中的单元格 例如 我想在单元格中输入 FillHere 结果我将在一些单元格中填充一些数据 我尝试过这样的功能 Function FillHere Dim rngCaller As Range Set r
  • 如何在命令行上从 SVN 检出已删除的项目

    我正在尝试签出一个在版本 401 中从我的 SVN 中删除的项目 该项目现已失效 并已完全被代码重写所取代 但我想签出 以便我可以参考回来在重写时修改旧代码的小片段 据我所知 这应该像检查旧路径和最后一个好的修订版本 400 一样简单 但是
  • 如何关注WPF TabControl新添加的TabItem?

    我面临一个问题 我需要能够真正集中精力TabItem选项卡中的TabControl就像我会按TAB钥匙 我知道我可以使用SendKeys SendWait TAB 为了实现这一目标 但我更喜欢更强大的解决方案 选项卡项绑定到ItemSour
  • C 中的变量类型以及谁跟踪它

    我正在参加 MOOC 课程CS50 https www edx org course introduction computer science harvardx cs50x 来自哈佛大学 在第一堂课中 我们学习了不同数据类型的变量 int
  • iOS SecKeyRawVerify 返回-9809

    我用 openssl 创建了密钥对 openssl req x509 out public key der outform der new newkey rsa 1024 nodes keyout private key pem days
  • IE9 中的白屏问题 - 删除 iframe

    我想知道是否有人可以让我深入了解我一直在努力解决的一个非常奇怪的 IE9 问题 我正在完成一个工作网站的制作 它在 ff chrome ie7 ie8 中运行良好 没有脚本错误 在 IE9 上 应用程序的最后一步会导致整个选项卡变成白屏 并
  • Mac 上的 Sed 正则表达式问题,在 Linux 上工作正常

    这在 Linux Debian 上运行良好 sed e s t psd 在Mac上 我相信我必须使用 E标志 而不是 e sed E s t psd 但正则表达式不匹配 因此不会删除我想要的行 关于如何解决这个问题有什么建议吗 输入示例 a
  • 在Python中以编程方式创建变量[重复]

    这个问题在这里已经有答案了 可能的重复 如何以编程方式设置全局 模块 变量 https stackoverflow com questions 1429814 how to programmatically set a global mod
  • ASP.NET MVC4 中的 Ninject

    因此 经过一番折腾后 我终于将 Ninject 连接起来并在我的 MVC4 应用程序中进行编译 据我所知 我遇到的问题是 IDependencyScope 接口不再存在 并且 System Web Http Dependency 命名空间已
  • 计算圆与通过中心的直线的交点

    我如何获得直线和圆的交点 我有很多关于这个主题的信息 但我的要求不匹配 我得到了一条线 其一个端点位于圆的原点 而另一端位于圆之外的某处 现在我需要这条线和圆的交点 我尝试使用下面的公式从圆外找到最近的边缘点 但无法破解它 closestC