Html5 Canvas 变换算法 - 应用变换后查找对象坐标

2023-12-06

在 html5 画布上,我正在绘制对象(矩形、圆形等),这些对象具有缩放、倾斜、旋转等变换属性。这些对象可以嵌套。

当我应用转换后,我想找到给定对象的精确 x, y 坐标时,就会出现问题,但它超出了我的范围。

致所有热衷于交互式计算机图形学的专家;请帮我解决这个问题。

提前致谢。


二维中的所有仿射变换都可以表示为以下形式的矩阵:

    [ a  c  dx ]
T = [ b  d  dy ]
    [ 0  0   1 ]

这可以用以下方法表示context.transform(a, b, c, d, dx, dy);.

当应用于某个坐标时,(x,y),您首先必须添加第三个坐标,该坐标始终是1: <x, y, 1>。然后将变换矩阵相乘即可​​得到结果:

[ a*x + c*y + dx ]
[ b*x + d*y + dy ]
[       1        ]

如果最后一个坐标中得到除“1”以外的任何值,则必须将向量除以它。


要走另一条路,你必须反转矩阵:

[ d/M  -c/M  (c*dy - d*dx)/M ]
[ b/M   a/M  (b*dx - a*dy)/M ]
[  0     0          1        ]

where M is (a*d - b*c).


可以通过将它们的矩阵相乘来按顺序应用多个变换。乘法的顺序很重要。


context.translate(dx,dy) <==> context.transform( 1,  0,  0,  1, dx, dy)
context.rotate(θ)        <==> context.transform( c,  s, -s,  c,  0,  0)
context.scale(sx,sy)     <==> context.transform(sx,  0,  0, sy,  0,  0)

where c = Math.cos(θ) and s = Math.sin(θ)


如果你有一些坐标(x,y)在对象空间中,如果您想知道它最终会出现在屏幕上的哪个位置,则可以对其应用变换。

如果你有一些坐标(x,y)在屏幕上,您想知道对象上的哪个点,您乘以变换的倒数。

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

Html5 Canvas 变换算法 - 应用变换后查找对象坐标 的相关文章

  • HTML 中的自定义自关闭/不配对标签?

    以下代码 jsfiddle http jsfiddle net CUZta var div document createElement div div innerHTML
  • 两个单独表格上的 Td 高度

    我有两个单独的表 我在每个 tr 上使用焦点 悬停函数 该函数同时在两个表上都很好用 我的问题是 td 高度 因为如果第一个表中 td 的描述更大 将显示在中的两行上相同的td和td的高度将被修改 但仅限于第一个表td 如何记住第一个表中
  • 继续使用 sketch.js 编辑草图图像 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在使用 sketch js 中的示例 http intridea github io sketch js http intridea g
  • 录制视频和音频并上传到服务器

    我想为网站添加视频录制功能 我一直在搜索并尝试所有可能的可用解决方案 但还没有任何工作正常 我已经尝试过以下解决方案 WebRTC 我知道使用 WebRTC 我们可以从网络摄像头和麦克风获取流 我发现了很多关于相同内容的文章 但没有一篇解释
  • getFieldValue 或 Formik 中的类似内容

    有没有办法获取 formik 中单击处理程序内字段的值 您可以使用setFieldValue在那里 所以我假设 但在任何地方都找不到 Formik 应该有类似的东西来检索值
  • 尝试为每一行编写测试用例

    已经编写了跳跃方法的测试用例 但当我看到代码覆盖率报告时 它不会进入onloadend方法seat onloadend 在 createSpyObj 中我调用了 loadend 但它仍然没有进入内部 你们能告诉我如何解决它吗 下面提供我的代
  • 如何禁用WebStorms未使用的功能颜色功能?

    我想知道是否有人知道如何禁用 WebStorm 中的功能 如果您创建一个函数但尚未调用它 颜色将保持绿色而不是灰色 我进入首选项区域并将全局函数颜色更改为绿色 但只有当我调用它们时它们才会变成绿色 对于任何未调用的函数将保持灰色 转到文件
  • 如果 JavaScript 中未定义,则设置变量

    我知道我可以测试 JavaScript 变量 然后定义它 如果是 undefined 但是有没有什么办法可以说 var setVariable localStorage getItem value 0 似乎是一种更清晰的方式 而且我很确定我
  • Angular 2延迟加载模块-服务不是单例

    我已经在我的应用程序中实现了延迟加载模块 app module ts 配置正确 NgModule declarations AppComponent HeaderComponent HomeComponent imports Browser
  • 替换后正确的子串位置

    我有一个由用户提供的这样的函数 function replace function string return string replace smile g replace foo bar baz g text 1 我有这样的输入字符串 v
  • 从请求响应创建 PDF 不适用于 axios,但适用于本机 xhr

    为了强制从服务器下载 PDF 我尝试使用 axios 和本机 xhr 对象 原因是我必须发送post请求 因为我向服务器传递了太多数据 所以带有简单链接的选项 例如site ru download pdf对我不起作用 尽管我最终设法用 Xh
  • 使用 javascript 将文本附加到文本区域

    如何将文本列表附加到文本区域
  • 在全局范围内查找 JavaScript 函数

    有没有办法在当前活动的对象模型中搜索 JavaScript 属性 例如命名函数 Firebug 在 DOM 选项卡上显示的内容 我在 Chrome 开发人员工具中找不到直接等效项 加载页面 使用主要浏览器的通用开发人员工具 一个例子是 我搜
  • 当位置从相对固定变为固定时,div 的宽度会发生变化

    当 div topNav 的位置样式从相对更改为固定时 其宽度会更改几个像素 我找到了一个 jquery 插件 http imakewebthings github com jquery waypoints 它可以优雅地执行我正在寻找的相同
  • Node.js ES6如何从模块导出类? [复制]

    这个问题在这里已经有答案了 我正在尝试从 Node js 6 2 0 中的 CommonJS 模块导出 ES6 类 class MyClass class contents here exports MyClass 然后将其导入到另一个模块
  • 如何以编程方式确定 HTML 对象可以侦听哪些事件?

    我一直在查看developer mozilla org 和Apple 开发文档上的文档 但我找不到解释是否可以通过编程方式确定特定HTML 标记是否支持给定事件监听器的文档 就像我知道的那样
  • 设置 D3 力定向图

    致尊敬的读者 我对 javascript 相当陌生 我也遇到过这个问题 我正在尝试实现这个力导向图的修改版本 http mbostock github com d3 ex force html http mbostock github co
  • 对数组进行分组并获取计数[重复]

    这个问题在这里已经有答案了 假设我有这样的数组 foo bar foo bar bar bar zoom 我想将其分组 这样我就可以得到这样的计数 foo 2 bar 4 zoom 1 有没有一个实用程序可以做到这一点 只需使用该功能Arr
  • 如何检查令牌过期和注销用户?

    当用户单击注销按钮时 他 她可以自己注销 但是如果令牌过期 他 她就无法注销 因为在我的应用程序中 令牌在服务器端和前端都使用 当用户单击注销按钮时 如果令牌有效 则服务器和浏览器中的令牌都会被清除 当用户未注销并且他 她的令牌过期但未在浏
  • 访问影子 DOM 中的元素

    是否有可能查找 Shadow DOM 中的元素与蟒蛇硒 示例用例 我有这个input with type date

随机推荐

  • Web客户端下载文件

    我有以下 PS 脚本来使用下载文件WebClient 下载链接位于文本文件中 下载有效 但是 我想确保不会覆盖重复的文件 因此我添加了额外的代码 该代码对于单个文件运行良好 但是 如果发现重复 则代码会因以下错误而中断 使用 2 个参数调用
  • 扩展 UILocalNotification

    我是 iOS 初学者 我尝试扩展 UILocalNotification 下面是我的班级 interface FSCustomNatification UILocalNotification typedef enum FSCustomNat
  • 如何访问 angular.dart 组件的属性或方法

    我定义了一个角度 dart 组件像这样 NgComponent selector dartcomp templateUrl dartComp html publishAs ctrl map const val val class DartC
  • 跳转目标与指令pc 0x400014高4位不同

    我正在处理我的 MIPS 分配 但收到此错误 跳转目标与指令 pc 0x400014 的高位 4 位不同 我想要一些帮助 您正尝试跳转到内存中当前 256MByte 区域之外的地址 看here 如果您需要帮助识别代码中的问题 您需要发布一些
  • 用于桌面应用程序的 Swing 与 JavaFx [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我有一个非常大的程序 当前正在使用 SWT 该程序可以在Windows Mac和Linux上运行 它是一个包含很多元素的大型桌面应用程序 现在 SWT 有点老了 我想切换到 Swing 或
  • 是否存在某些情况下您更喜欢较高的 Big-O 时间复杂度算法而不是较低的算法?

    在某些情况下您会更喜欢O log n 时间复杂度为O 1 时间复杂度 或者O n to O log n 你有什么例子吗 与较低的算法相比 选择具有较高大 O 时间复杂度的算法可能有很多原因 大多数时候 降低大 O 复杂度更难实现 需要熟练的
  • PHP - 500 而不是错误

    我有一个用 PHP 编写的页面 我无权访问服务器 我想让 PHP 遇到错误时不显示错误消息 而是给出 500 如果 display errors 关闭 PHP 5 2 默认情况下会在发生致命错误时发送 HTTP 500 如果托管使用较旧的
  • Swift:使用 self.moc.save() 保存核心数据时出现 Nil 错误

    自从我将项目更改为使用 objectWillChange send 以来 我收到零错误 因为我需要手动更新视图 因为它不会为自定义轮播视图更新自身 因为核心数据 如果我写 1 并点击下一步按钮 NavigationLink 控制台日志页面名
  • Google Cloud 端点的缓存?

    对 Cloud Endpoints 的请求会被缓存吗 官方文档对这个问题有点了解 文档如下 Cloud Endpoints 使用分布式可扩展服务代理来 提供低延迟和高性能 甚至可以为最多的人提供服务 要求严格的 API 并且可以与 Goog
  • 无需用户交互即可触发的 Javascript 事件?

    我的表单上的文本框可能会根据各种下拉列表中选择的内容而变化 有没有办法在文本框值更改时调用 JavaScript 函数 尝试了 onchange 事件 但这似乎只有在用户手动更改文本框值时才有效 Cheers Breand n 不会 由 j
  • Java Swing:蝇量级 vs 新窗口

    我正在开发一个新的应用程序 我将同时打开一些窗口 我目前正在尝试设计 GUI 但我正在努力解决两个选择 我可以使用侧面导航面板并使用页面的中心来显示每个面板的内容 这些面板将根据享元模式进行存储 我将在单击导航按钮时隐藏 显示它们 以便在隐
  • 纯 CSS 折叠手风琴

    我有一个 CSS 折叠手风琴 只有纯 CSS 它工作完美 我只有 1 个问题 现在 如果用户单击任何标签 标签一 标签二 标签三 他无法再次单击标签将其关闭 如果用户单击下一个标签 每个标签都可以关闭 我想让它成为可能 例如 用户单击标签一
  • Pandas:计算平均值,忽略自己行的值[重复]

    这个问题在这里已经有答案了 我想按组计算平均值 忽略行本身的值 import pandas as pd d col1 a a b a b a col2 0 4 3 5 3 4 df pd DataFrame data d 我知道如何按组返回
  • 获取文件移动日期时间

    当您复制文件时 在 Windows 环境中 Creation 和 LastAccess 日期时间会被修改 并且可以使用FileInfo object 但是 我找不到任何可靠的日期时间 直接链接到文件 当文件移动到文件夹中时 该日期时间会发生
  • 如何在 C++ 中将数字转换为字符串,反之亦然

    由于这个问题每周都会被问到 所以FAQ可能会帮助很多用户 如何在 C 中将整数转换为字符串 C 中如何将字符串转换为整数 如何在C 中将浮点数转换为字符串 C 中如何将字符串转换为浮点数 C 11 更新 截至C 11标准 字符串到数字的转换
  • 根据数组元素的属性获取数组元素的索引

    我有一个 JavaScript 对象数组 如下所示 var myArray 每个物体都有独特的id除其他属性外 id 4 property1 something property2 something 如果我只知道它 如何获取该数组中特定对
  • 未捕获的ReferenceError:进程未定义react-bootstrap

    我正在尝试将 React bootstrap js 文件包含到我的项目中几个小时 我是反应新手 我只会将它用于客户端 我尝试从 CDN 包含 但无法正常工作 React Bootstrap Uncaught ReferenceError 未
  • 是否可以从 Azure Python SDK 获取 ASC 位置?

    我正在使用以下方法获取订阅的安全分数Microsoft Azure 安全中心 ASC 管理客户端库 库中的所有操作都表明 您不应该直接实例化此类 而应创建一个 Client 实例 该实例将为您创建该类并将其附加为属性 因此 我正在创建一个安
  • 使用带有 unicode 字符的 ng-pattern (Angular.JS) 会产生不良结果

    我正在使用 ng pattern 其输入字段应仅接受希伯来字符 我已经找出了希伯来字符的 unicode 数字 这是我的模式 scope onlyHebrewPattern u05D0 u05F3 g 我的表单输入
  • Html5 Canvas 变换算法 - 应用变换后查找对象坐标

    在 html5 画布上 我正在绘制对象 矩形 圆形等 这些对象具有缩放 倾斜 旋转等变换属性 这些对象可以嵌套 当我应用转换后 我想找到给定对象的精确 x y 坐标时 就会出现问题 但它超出了我的范围 致所有热衷于交互式计算机图形学的专家