如何计算沿直线的镜像点?

2023-11-22

在二维平面中,我有一个点和一条线。如何获得沿着这条线的镜像点?


当在计算机程序中完成类似的事情时,您可能需要处理的问题之一是仅使用整数算术(或尽可能多)来执行这些计算,假设输入是整数。尽可能以整数进行此操作是一个单独的问题,我不会在这里讨论。

以下是一个“数学”解决方案,如果按字面实现,则需要浮点计算。我不知道这对于你的情况是否可以接受。您可以根据自己的喜好自行优化。

(1)代表您的线路L by

A * x + B * y + C = 0

方程。注意向量(A, B)是这条线的法向量。

例如,如果直线由两点定义X1(x1, y1) and X2(x2, y2), then

A = y2 - y1
B = -(x2 - x1)
C = -A * x1 - B * y1

(2)通过将所有系数除以向量的长度来标准化方程(A, B)。 IE。计算长度

M = sqrt(A * A + B * B)

然后计算值

A' = A / M
B' = B / M
C' = C / M

等式

A' * x + B' * y + C' = 0

仍然是你的直线的等价方程L除了现在法向量(A', B')是单位向量。

(3)说出你的观点P(px, py)并计算值

D = A' * px + B' * py + C'

这将为您提供signed距离D从你的观点来看P到你的线路L。换句话说,这是距离P到最近的点L(我们并不真正关心最近点本身,我们只需要距离)。

标志上写着哪个side线的L重点P位于。如果P位于向量的同一侧(A', B')指向(“正”侧),距离为正。如果P位于另一侧(“负”侧),距离为负。

(4)为了找到你的镜像点P'(px', py')你需要改变你的观点P按绝对距离|2 * D|跨过这条线L到另一边。

“越过线”的真正意思是如果点P位于“积极”的一面L,那么我们必须逆着向量的方向移动它(A', B')到“消极”的一面。反之亦然,如果点P位于“消极”的一面L,那么我们必须将其沿向量方向移动(A', B')到“积极”的一面。

这可以简单地表示为将点移动距离-2 * D(注意负号)向量方向(A', B').

这意味着

px' = px - 2 * A' * D
py' = py - 2 * B' * D

给你你的镜像点P'(px', py').


或者,您可以使用基于查找实际最近点的方法N在线的L然后反映你的观点PN。这已经在其他答案中建议过,我只会描述我会如何做。

(1)建立一个方程

A*x + B*y + C = 0

为您的线路L完全按照上面步骤 1 中的描述。无需标准化该方程。

(2)建立穿过的垂直线的方程P。假设垂直线表示为

D*x + E*y + F = 0

The D and E系数立即已知

D = B
E = -A

while F可以通过代入点计算P代入方程

F = -D*px - E*py

(3)通过求解两个线性方程组找到这两条线的交点

A*x + B*y = -C
D*x + E*y = -F

克莱默法则在这种情况下效果很好。给出的公式为线相交维基百科中的文章无非是克莱默规则在该系统中的应用。

该解决方案为您提供最近的点N(nx, ny)我们正在寻找。

(4)现在只要计算一下

px' = nx + (nx - px)
py' = ny + (ny - py)

找到你的观点P'(px', py').

请注意,这种方法几乎可以完全用整数来实现。唯一可能失去精度的步骤是第 3 步中克莱默规则内的除法。当然,像往常一样,您必须为“几乎积分”解决方案付出的代价是需要进行大量算术。偶系数C and F可能会溢出,更不用说克莱默规则公式中的计算了。

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

如何计算沿直线的镜像点? 的相关文章

  • 如何使用NSDecimalNumber?

    我正在构建一个需要对金钱进行计算的应用程序 我想知道如何正确使用 NSDecimalNumber 特别是如何从整数 浮点数和双精度数初始化它 我只发现它很容易使用 decimalNumberWithString 方法 这 initWith
  • Java 中的数学方程如何工作?

    当我做这样的事情时 int test 5 3 4 1 2 我得到 9 我怀疑这是因为 int 向下舍入 但是 当我这样做时 float test 5 3 4 1 2 我也得到 9 但是 当我这样做时 float test1 5 float
  • 数字总和直到作为输入给出的数字

    如果给出一个数字作为输入 则找到该数字之前所有数字的总和 例如输入 11 则答案为 1 2 9 1 0 1 1 蛮力方法是计算所有小于某个数字的数字的数字之和 我已经实现了该方法 我想知道是否有其他方法可以在不实际计算每个数字的数字之和的情
  • 使用向量的 merge_sort 在少于 9 个输入的情况下效果很好

    不知何故 我使用向量实现了合并排序 问题是 它可以在少于 9 个输入的情况下正常工作 但在有 9 个或更多输入的情况下 它会执行一些我不明白的操作 如下所示 Input 5 4 3 2 1 6 5 4 3 2 1 9 8 7 6 5 4 3
  • 如何改进 PHP 分页算法?

    我正在研究 PHP 中的分页算法 我可以猜测它需要改进的空间 所以我想对如何改进它有一些想法 无论是从 UI UX 的角度清理代码本身 还是你能想到的任何其他东西 该算法应输出如下所示的分页 1 2 3 6 7 8 97 98 99 or
  • 将两个大数作为字符串相除,而不使用java中的Bignumbers

    我需要在不使用 Biginteger 的情况下划分两个大整数 因为数字不能存储在原始类型中 因为我需要从给定的字符串中逐个字符地执行此操作 我已经创建了一个名为 BigNumber 的类 用这个类我可以 Add multiply 比较两个内
  • 动态规划的复杂组合条件

    我正在探索动态规划设计方法如何与问题的底层组合属性相关 为此 我正在查看的规范实例硬币找零问题 Let S d 1 d 2 d m and n gt 0是请求的金额 我们可以用多少种方式相加n仅使用中的元素S 如果我们遵循一个动态规划如果要
  • 查找数组中的组合

    我在java中有一个像这样的二维数组 transmission communication tv television approach memorycode methodact 我需要获得所有组合 例如 transmission appr
  • ID3和C4.5:“增益比”如何标准化“增益”?

    ID3算法使用 信息增益 度量 C4 5 使用 增益比 度量 即信息增益除以SplitInfo 然而SplitInfo对于记录在不同结果之间平均分配的分割 该值较高 否则较低 我的问题是 这如何帮助解决信息增益偏向于具有多种结果的分裂的问题
  • 查找重叠间隔序列中最大和的算法

    我试图解决的问题在数轴上有一个间隔列表 每个间隔都有一个预定义的分数 我需要返回最大可能的总分 问题是间隔重叠 并且重叠间隔中我只能使用一个 这是一个例子 Intervals Score 0 5 15 4 9 18 10 15 12 8 2
  • 对产品列表进行分类的算法? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个代表或多或少相同的产品的列表 例如 在下面的列表中 它们都是希捷硬盘 希捷硬盘 500Go 适用于笔记本电脑的希捷硬盘 120
  • 具有 3 路划分的快速排序

    什么是三向分区快速排序 画一个数组 3 5 2 7 6 4 2 8 8 9 0 A 两分区快速排序会选择一个值 比如 4 并将每个大于 4 的元素放在数组的一侧 将每个小于 4 的元素放在另一侧 就像这样 3 2 0 2 4 8 7 8 9
  • 如何找到给定顶点的所有多边形?

    我有一个顶点列表 并且我知道它们之间的连接 我试图找到顶点的所有多边形形状 这些多边形形状不应重叠 我做了一些研究 我认为如果我可以顺时针 或逆时针 没有区别 遍历顶点 我可以检测多边形形状 因此 我寻找顺时针遍历顶点的解决方案 我发现了一
  • NSArray 中不重复的所有可能组合

    假设我有一个包含 3 个数字的数组 NSArray array 1 2 3 我想进行所有组合而不重复 所以我需要的是这样的 1 2 3 1 2 2 3 1 3 1 2 3 我当前的代码是这样的 NSArray array 1 2 3 int
  • 在 3d 空间中的两个平面之间进行插值

    我正在开发一种工具 可以让您在 3D 体积 上圈出 包围事物 我想通过标记 切片 1 和 3 并从该信息 填充 切片 2 来节省时间 两个简单的解决方案是 1 slice2 slice1 AND slice3 gets the overla
  • 归并排序究竟进行了多少次比较?

    我读到 在实践中 快速排序比合并排序快得多 其原因是隐藏常量 那么 随机快速排序复杂度的解是2nlnn 1 39nlogn 这意味着快速排序中的常数是1 39 但是合并排序呢 归并排序中的常数是什么 让我们看看能否解决这个问题 在合并排序中
  • 绘图:仅保留最相关的数据

    为了节省带宽并且不用自己生成图片 图表 我计划使用 Google 的图表 API http code google com apis chart http code google com apis chart 它的工作原理是简单地发出一个
  • 如何测试哈希函数?

    有没有办法测试哈希函数的质量 我希望在哈希表中使用时具有良好的分布 如果这可以在单元测试中验证 那就太好了 EDIT 为了澄清 我的问题是我已经使用了longJava 中的值的方式是第一个 32 位编码一个 ID 第二个 32 位编码另一个
  • 计算某个数的某次幂的模(该次幂的数字相当大)

    我想自己计算RSA算法 我需要计算某个数的某个幂的模数 问题是 在一定的功率下 这个数字可能会变得相当大 这就是我想要的 x pow n p q 如何有效地确定 x 如果您使用 NET 4 我建议您查看BigInteger http msd
  • 良好的线性代数包[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在为一个项目实现一些谱图算法 其中很大一部分是查找大型稀疏矩阵以及乘法矩阵的特征值和特征向量 我的问

随机推荐

  • Python Numpy 中的数组和 __rmul__ 运算符

    在一个项目中 我创建了一个类 我需要这个新类和一个真实矩阵之间的操作 所以我重载了 rmul 像这样的功能 class foo object aarg 0 def init self self aarg 1 def rmul self A
  • 如何在图像上绘制带有轮廓的文本?

    我一直在搜索和寻找在图像上绘制带有轮廓的文本 这是我的代码 private static void tulisnamafile string imagepath string textnya Image image Image FromSt
  • WinRT StorageFile 写入下载的文件

    我正在努力解决一个简单的问题 我想使用以下代码从网络下载图像 WebRequest requestPic WebRequest Create http something com id jpg WebResponse responsePic
  • preg_match:仅数字字母和逗号

    如何编写仅匹配数字字母和逗号的正则表达式 我想出了下面这个 但它不起作用 它也接受其他标点符号 check for matches number alphabets and commas only if preg match a zA Z0
  • 由于环境变量(HP笔记本电脑),delphi XE2无法在我的计算机上编译任何项目

    我有一台 HP 笔记本电脑 并且在 HP 笔记本电脑上安装了 delphi xe2 过去 5 个月前我使用 delphi 没有任何问题 但现在我收到此错误消息 DCC Error E1026 File not found FMX Filte
  • 订阅中的 Angular 订阅

    我有以下由多个订阅组成的代码 我需要实现的目标是这样的 订阅activatedRoute以获取用户和产品数据 返回商品数据后 使用商品数据订阅getSeller服务 使用返回的卖家数据订阅 getRating 服务 我的问题 有没有更好的方
  • Lua 5.2 中的沙箱

    我正在学习Roberto Ierusalimschy的 Programing in Lua 我发现书中的Sandboxing示例使用了该函数setfenv 改变给定函数的环境 但是在 lua 5 2 中这个函数不再可用 我尝试将文件 配置文
  • WPF DataGrid:如何将列设置为 TextWrap?

    我不确定为什么我的代码没有正确执行 TextWrapping 它不会包装 描述 列的文本 这正是我想要的 它只是将其切断 甚至没有使用 来让我知道还有更多数据 我尝试使用在网上找到的代码来完成这项工作 但没有成功 理想情况下 我希望能够仅将
  • 通过XPath提取属性节点的值

    如何通过 XPath 提取属性节点的值 示例 XML 文件是
  • C++20 标准对于将主题用作模板非类型参数有何规定?

    The 模板非类型参数 文章 模板参数和模板参数 的段落指出 唯一的例外是引用的非类型模板参数 或指针类型以及引用或指针的非静态数据成员 输入类类型及其子对象的非类型模板参数 C 20 起 不能引用 成为以下地址 临时对象 包括在引用初始化
  • 通过 Google Chrome 扩展访问本地文件?

    我需要从本地文件将名称列表加载到我的 google chrome 扩展中 如何才能做到这一点 如果文件本身附带扩展名怎么办 如果此文件随您的扩展一起提供 那么您可以使用以下命令加载它XMLHttpRequest内部背景页面 使用相对路径 带
  • 嵌入式(ASP.NET)网络服务器[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在寻找适用于 NET 的轻量级可嵌入 Web 服务器 我需要它来伪造 SOAP Web 服务以进行自动化测试 因此如果它支持 ASP NET W
  • jQuery Ajax 到 asp.net asmx Web 服务抛出请求格式无效:application/json

    我让 jquery 使用整数调用 asp net web 服务 在我们移植到 net 4 0 的旧应用程序上 我无法让此调用正常工作 我可以调用一个没有参数的方法 但将数据发送到 Web 方法会返回以下错误 System InvalidOp
  • 如何在 Android 设备中检测来电?

    我正在尝试制作一个应用程序 例如当电话打来电话时我想检测号码 以下是我尝试过的方法 但它没有检测到来电 我想运行我的MainActivity在后台 我该怎么做 我已给予许可manifest file
  • 我应该如何构建一个简单的 ASP.NET MVC 应用程序?

    我一直在阅读一些有关 ASP NET MVC SOLID 等的内容 并且正在尝试为中小型 ASP NET MVC 应用程序找出一个简单的 秘诀 将这些概念整合在一起 我最关心的问题是控制器过于复杂 就像网络表单中的代码隐藏文件 其中包含所有
  • Cython 和 fortran - 如何在没有 f2py 的情况下一起编译

    最终更新 这个问题是关于如何写一个setup py这将编译一个 cython 模块 该模块可以像 C 一样直接访问 FORTRAN 代码 这是一个相当漫长而艰巨的解决方案旅程 但完整的混乱情况包含在下面作为上下文 原问题 我有一个扩展 它是
  • 无论系统是32位还是64位,int都是32位,long还是64位吗?

    在java中 无论体系结构是32位还是64位 int是否保证始终为32位大小和long为64位大小 Java 是平台无关的 所以int是 32 位 并且long是 64 位的
  • Android 开关 - 在开/关时更改开关背景

    does someone know how I can implement a switch like this in my application 或者如何更改标准开关打开 关闭时的背景颜色 以下是供您开始使用的示例 XML
  • 在泽西岛从 1.9 升级到 Jackson 2.0 不起作用

    我正在使用 Jackson 位于泽西岛 来序列化实体 并且我正在从 Jackson 1 9 迁移到 2 0 我跟着本指南 一开始似乎一切都很顺利 但仔细观察发现 Jackson 1 9 仍在用于序列化我的响应 因此忽略了我的 迁移的 Jac
  • 如何计算沿直线的镜像点?

    在二维平面中 我有一个点和一条线 如何获得沿着这条线的镜像点 当在计算机程序中完成类似的事情时 您可能需要处理的问题之一是仅使用整数算术 或尽可能多 来执行这些计算 假设输入是整数 尽可能以整数进行此操作是一个单独的问题 我不会在这里讨论