从点(x,y)以给定角度在边界内绘制一条线[重复]

2024-03-10

我正在尝试在 JavaScript 画布上画一条线。我有两个点A和B(如图所示)。

我使用此代码来查找这两点之间的角度:

// p1 is point A and p2 is point B    
var theta = Math.atan2(p2.y - p1.y, p2.x - p1.x);

现在我想从 A 点到画布末端画一条线,我还想得到线的终点(图中的 C 点)。

这可以使用画布的角度和尺寸(宽度和高度)来实现吗?


不用三角函数也可以解决这个问题。首先构造给定 AB 射线的参数表示:

 x = A.X + dx * t
 y = A.Y + dy * t
   where
 dx = B.X - A.X
 dy = B.Y - A.Y

检查哪条边将首先相交(t 值较小):

//potential border positions    
if dx > 0 then
   ex = width
else
   ex = 0

if dy > 0 then
   ey = height
else
   ey = 0

//check for horizontal/vertical lines 
if dx = 0 then
    return cx = A.X,  cy = ey

if dy = 0 then
    return cy = A.Y,  cx = ex


//in general case find parameters of intersection with horizontal and vertical edge
tx = (ex - A.X) / dx
ty = (ey - A.Y) / dy

//and get intersection for smaller parameter value
if tx <= ty then
   cx = ex
   cy = A.Y + tx * dy
else
   cy = ey
   cx = A.X + ty * dx

return cx, cy

宽度 = 400、高度 = 300、固定 A 点和各种 B 点的结果:

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

从点(x,y)以给定角度在边界内绘制一条线[重复] 的相关文章

随机推荐

  • 例如,C++0x auto 关键字的含义是什么?

    auto a Foo
  • 将320x240x3点云矩阵转换为320x240x1深度图

    有人可以用Python帮我解决以下问题吗 我有从虚拟相机获得的点云矩阵 其尺寸为 320x240x3 表示每个点 相机视图中的点 的 x y z 坐标 所有值的范围都从负到正 如何将此点云矩阵转换为存储每个像素的正深度值的 320x240x
  • 在 Swift 3 中使用选择器

    我正在用 Swift 3 编写我的 iOS 应用程序 我有一个UIViewController扩展 我必须检查控制器实例是否响应方法 下面是我尝试的代码 extension UIViewController func myMethod if
  • 如何使用 WorkManager 更改定期工作请求周期而不立即运行?

    val request PeriodicWorkRequestBuilder
  • 使用R的lm(),公式对象应该作为字符传递?

    我发现 R 使用 lm 时有一个奇怪的行为 基于cars对象 以下函数是在速度 30 时使用局部线性回归绘制拟合断裂距离 func1 lt function fm spd w lt dnorm cars speed spd sd 5 fit
  • Jenkins 与 intellij 共享库

    我开始实现 Jenkins 共享库并尝试使用 intellij 作为我的 ide 编写我的 jenkinsfile 如何从共享 lib 存储库获取函数到其中包含 jenkins 文件的其他存储库 只是为了澄清从 jenkins 运行时对我有
  • 查找数组的第一个重复项

    我决定学习 python 并使用 CodeFight 进行训练 第一个面试练习是找到数组的第一个重复项并返回它 如果没有则返回 1 这是我写的代码 def firstDuplicate a b print len a for i in ra
  • 当两个命令都存在时,在 jupyter 中使用“%”比使用“!”有优势吗?

    例如当我使用 pip install VSCode 建议我使用 pip install 同样有一个版本mv对彼此而言 and 使用其中一种比另一种有优势吗 Yes pip在大多数边缘情况下 将正确解析适当的虚拟环境 当前内核使用的虚拟环境
  • 如何在 Spring WebClient 中一次设置多个标头?

    我试图为我的其余客户端设置标头 但每次我都必须写 webclient get uri blah blah header key1 value1 header key2 value2 如何使用 headers 方法同时设置所有标头 如果这些标
  • Cloudinary api - 解决承诺

    我想编写一个函数 返回一个布尔值 指示我的 Cloudinary 空间中是否已存在具有指定 public id 的图像 我可以使用以下代码将结果记录到控制台 function isUploaded public id cloudinary
  • 不可能的布局?

    我开始认为这是不可能的 但我想我会问你们 基本上它是一个 2 列布局 但 业务 需要以下内容 始终占据整个浏览器窗口 适应浏览器窗口大小的调整 左栏的宽度是固定的 但该宽度在不同页面上应该是灵活的 左列顶部有一个固定高度的区域 左栏有一个底
  • 所有 mysql 引擎之间的主要区别是什么?

    我想总结一下所有 Mysql 引擎之间的主要区别 当然也包括最流行的引擎 我应该使用什么标准来确定使用哪个引擎 这里对它们进行了很好的描述 http dev mysql com doc refman 5 0 en storage engin
  • 如何更改 tcsh 提示符以显示当前工作目录?

    我在用tcsh我正在寻找一种响应式工作目录 我至少想显示最后一个文件夹名称而不是获取完整路径 想象我当前的工作目录是 user hostname home us Desktop my projects 然后我想显示这样的提示 user ho
  • 获取 Librosa 中与 STFT 相关的频率

    使用时librosa stft 要计算频谱图 如何获取相关的频率值 我对生成图像不感兴趣 如librosa display specshow 而是我希望掌握这些价值观 y sr librosa load recordings high pi
  • Azure 媒体播放器无法在 iPhone 上使用 AES 保护

    我们在 iPhone 6 A1586 上播放受 AES 使用 JWT 令牌身份验证 保护的视频时遇到问题 欠费错误如下 0x50300000 视频播放因损坏问题而中止 或者因为视频使用了您的浏览器不支持的功能 禁用加密后 播放相同的视频不会
  • Google 脚本可跨多个工作表工作

    我是 Google 脚本的新手 所以如果这个问题已经得到解答 我深表歉意 我有一个包含多个工作表的电子表格 其中一些工作表上有一个状态列 使用我已经发现的代码 我可以根据状态列中单元格中的值设置整个行颜色 我遇到的问题是我只能让代码在一张纸
  • 有效查询合并2个以上子查询

    我有一个数据库 books primary key bookID characterNames foreign key books bookID locations foreign key books bookID 角色名称和位置的文本位置
  • 我可以在批处理文件中使用多少个变量

    我有点好奇我可以在批处理文件中设置多少个变量 我这里有一个小脚本 ECHO OFF SETLOCAL EnableDelayedExpansion FOR L P IN 1 1 2147483647 DO SET Foo P P ECHO
  • 寻求参考来理解一种模式“!_[$0]++”

    我是 AWK 新手 使用移植到 Windows UNXUtils 的 GNU 实用程序和 gawk 而不是 awk 该论坛上的解决方案的工作原理如下绝对的魔法 并且我正在尝试找到一个可以阅读的来源 以更好地理解该解决方案中提供的模式表达式
  • 从点(x,y)以给定角度在边界内绘制一条线[重复]

    这个问题在这里已经有答案了 我正在尝试在 JavaScript 画布上画一条线 我有两个点A和B 如图所示 我使用此代码来查找这两点之间的角度 p1 is point A and p2 is point B var theta Math a