获取距离直线最近的点

2023-12-09

我想要一个直接的 C# 函数来获取距离线段 AB 最近的点(从点 P)。抽象函数可能如下所示。我已经搜索过了,但没有找到可用的(由我)解决方案。

public Point getClosestPointFromLine(Point A, Point B, Point P);

这是伪装成伪代码的 Ruby,假设Point每个对象都有一个x and y field.

def GetClosestPoint(A, B, P)

  a_to_p = [P.x - A.x, P.y - A.y]     # Storing vector A->P
  a_to_b = [B.x - A.x, B.y - A.y]     # Storing vector A->B

  atb2 = a_to_b[0]**2 + a_to_b[1]**2  # **2 means "squared"
                                      #   Basically finding the squared magnitude
                                      #   of a_to_b

  atp_dot_atb = a_to_p[0]*a_to_b[0] + a_to_p[1]*a_to_b[1]
                                      # The dot product of a_to_p and a_to_b

  t = atp_dot_atb / atb2              # The normalized "distance" from a to
                                      #   your closest point

  return Point.new( :x => A.x + a_to_b[0]*t,
                    :y => A.y + a_to_b[1]*t )
                                      # Add the distance to A, moving
                                      #   towards B

end

或者:

From 线与线的交点,在维基百科。首先,找到 Q,这是从 P 沿“正确方向”迈出一步所得到的第二个点。这给了我们四点。

def getClosestPointFromLine(A, B, P)

  a_to_b = [B.x - A.x, B.y - A.y]   # Finding the vector from A to B
                                        This step can be combined with the next
  perpendicular = [ -a_to_b[1], a_to_b[0] ]
                                    # The vector perpendicular to a_to_b;
                                        This step can also be combined with the next

  Q = Point.new(:x => P.x + perpendicular[0], :y => P.y + perpendicular[1])
                                    # Finding Q, the point "in the right direction"
                                    # If you want a mess, you can also combine this
                                    # with the next step.

  return Point.new (:x => ((A.x*B.y - A.y*B.x)*(P.x - Q.x) - (A.x-B.x)*(P.x*Q.y - P.y*Q.x)) / ((A.x - B.x)*(P.y-Q.y) - (A.y - B.y)*(P.y-Q.y)),
                    :y => ((A.x*B.y - A.y*B.x)*(P.y - Q.y) - (A.y-B.y)*(P.x*Q.y - P.y*Q.x)) / ((A.x - B.x)*(P.y-Q.y) - (A.y - B.y)*(P.y-Q.y)) )

end

出于性能原因,可以进行缓存、跳过步骤等。

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

获取距离直线最近的点 的相关文章

  • 通过 CMIS (dotCMIS) 连接到 SP2010:异常未经授权

    我正在使用 dotCMIS 并且想要简单连接到我的 SP2010 服务器 我尝试用 C 来做到这一点 如下所示http chemistry apache org dotnet getting started with dotcmis htm
  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • 按成员序列化

    我已经实现了template
  • 在哪里可以找到列出 SSE 内在函数操作的官方参考资料?

    是否有官方参考列出了 GCC 的 SSE 内部函数的操作 即 头文件中的函数 除了 Intel 的 vol 2 PDF 手册外 还有一个在线内在指南 https www intel com content www us en docs in
  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • 在 Windows 窗体中保存带有 Alpha 通道的单色位图会保存不同(错误)的颜色

    在 C NET 2 0 Windows 窗体 Visual Studio Express 2010 中 我保存由相同颜色组成的图像 Bitmap bitmap new Bitmap width height PixelFormat Form
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • 如何使用 C# / .Net 将文件列表从 AWS S3 下载到我的设备?

    我希望下载存储在 S3 中的多个图像 但目前如果我只能下载一个就足够了 我有对象路径的信息 当我运行以下代码时 出现此错误 遇到错误 消息 读取对象时 访问被拒绝 我首先做一个亚马逊S3客户端基于我的密钥和访问配置的对象连接到服务器 然后创
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • 忽略基类 使用 Dokka 查看子类文档中的公共函数

    我使用 Dokka 为 View 子类生成了文档 效果很好 但文档包含基本 View 类的数百个公共函数 有没有办法只记录我的子类公共函数 我尝试将这些选项添加到 Gradle 任务中 但我不认为这就是它的用途 dokkaHtml dokk
  • 使用 EF Core Linq2Sql 进行聚合的聚合

    我有一个带有 EF Core 2 2 Code First DB 的 ASP NET Core 2 2 项目 我有以下实体 建筑物 基本上是一个带有一些其他重要数据的地址 Floor 包含楼层号 一栋建筑物可以有多层 一个楼层必须恰好有一个
  • 如何解释await/async同步上下文切换行为

    关于以下代码的行为 有几件事 但有一件主要的事情 我不明白 有人可以帮忙解释一下吗 它实际上是非常简单的代码 只是一个调用异步方法的常规方法 在异步方法中 我使用 using 块来尝试临时更改 SynchronizationContext
  • 从 JSP 返回 JSONP 而不是 JSON

    I found 这个问题从jsp将响应类型设置为json 但我需要将响应类型设置为jsonp以进行跨域访问 还会是这样吗 response setContentType application javascript 并将来自jsp的响应包装
  • 如何使用 R8 在堆栈跟踪中保留原始行号?

    我正在尝试找出如何使用 R8 保留原始行号 使用当前的AndroidStudio制作应用程序并使用R8对其进行混淆 甚至上传mapping txt将文件上传到 Google Play Console 后 用户的堆栈跟踪在某些情况下是无用的
  • T-SQL 中的编辑距离

    我对 T SQL 计算 Levenshtein 距离的算法感兴趣 我在 TSQL 中实现了标准 Levenshtein 编辑距离函数 并进行了多项优化 与我所知的其他版本相比 速度有所提高 如果两个字符串的开头有共同的字符 共享前缀 结尾有
  • 无法使最大宽度与 Bootstrap 下拉菜单一起使用

    我有一个 Bootstrap 下拉菜单 在某些情况下 菜单项可能非常大 所以我需要设置一个max width 另外 我不希望菜单项被剪切 所以我必须使用white space normal也 问题是我的max width被完全忽略 如果我设
  • File.Copy 与手动 FileStream.Write 复制文件

    我的问题是关于文件复制性能 我们有一个媒体管理系统 需要将文件系统上的大量文件移动到不同位置 包括同一网络上的 Windows 共享 FTP 站点 AmazonS3 等 当我们都在一个 Windows 网络上时 我们可以使用System I
  • Delphi 编译器指令反向求值参数

    这个使用 Math pas 中的 IFThen 函数的 delphi 两行代码给我留下了深刻的印象 但是 它首先评估 DB ReturnFieldI 这很不幸 因为我需要调用 DB first 来获取第一条记录 DB RunQuery se
  • 如何对只读实例属性进行输入验证?

    发布了一个非常相似的问题here 但没有公认的答案 没有代码示例 而且我不太喜欢按照那里提供的唯一一个答案所建议的使用外部库的想法 以下代码允许定义只读实例属性 class Point def init self x y self x x
  • 有充分的理由编写我自己的 daemonize 函数而不是使用 daemon(3) 吗?

    网上有很多守护进程的示例实现 我看到的大多数不使用 daemon 3 函数在后台运行程序 这只是一个品味 无知的问题 还是有充分的理由编写我自己的守护函数 使用 daemon 3 有什么具体的缺点吗 是不是没有安全感 daemon 函数历史
  • 核心数据中的可转换属性无法导出/与 iCloud 同步

    我在用NSPersistentCloudKitContainer 所有数据均在 iCloud 中同步 卸载应用程序后 它会正确同步 但是 需要对敏感数据进行加密 我将密码属性设置为可转换 因此在本地工作得很好 但是当我删除该应用程序时 再次
  • 在 Origin 中将破幂律实现为拟合函数

    再会 我正在尝试使用 origin OriginLab 中的函数生成器来创建一个新函数来适应破碎的幂律 http en wikipedia org wiki Power law Broken power law 所以 我想我已经把实际的功能
  • 从 GUI 类 PyQt4 以外的类更改进度条的值

    我有一个由 Qt 设计器创建的 GUI 类 其中有一个进度条 还有另一个类 其中完成所有数字运算 在此期间我希望进度条定期更新 我认为我会这样做的方式是在其他班级中做类似的事情 gui progressbar setValue some 但
  • 在没有 xts 对象的情况下在 PortfolioAnalytics 中创建有效前沿

    有没有办法在 PortfolioAnalytics 包中创建有效前沿而不指定资产回报的 xts 对象 相反 我想提供预期回报向量和协方差矩阵 有两种方法 首先 您可以提供一个包含矩阵的列表 其结构如下所示 然后调用 Optimize por
  • 在 Mac 应用程序中的保存对话框中包含 iCloud

    我已经实施了iCloud支持我的 Mac 基于文档的应用程序 NSDocument子类可以处理本地存储上打开的保存文件 并且iCloud 但是 我可以将我的文件上传到iCloud只需将其拖动到 打开新文件 面板上即可 当应用程序提示用户保存
  • 如何区分 EOF 字符和实际的文件结尾?

    When reading a file I understand the last character provided is an EOF Now what happens when I have an EOF character in
  • Mojarra 2.0.3 中复合组件所需属性抛出异常

    我一直在使用 JSF 2 0 复合组件 但我对其中的 require 属性有点困惑composite attribute标签的意思是做 文档指出 如果页面作者必须提供此属性的值 则必需的属性为 true 我将其解释为必须为所有具有复合属性的
  • apollo-android可以用作java客户端吗?

    我正在开发一个需要与 Github GraphQl API 通信的 Spring Boot 应用程序 apollo android 可以用于此目的吗 由于所有可用的稀缺文档以及示例项目都是用 android 编写的 所以我不确定 维护者在这
  • 获取距离直线最近的点

    我想要一个直接的 C 函数来获取距离线段 AB 最近的点 从点 P 抽象函数可能如下所示 我已经搜索过了 但没有找到可用的 由我 解决方案 public Point getClosestPointFromLine Point A Point