Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 图像线跟踪数学很难解释_Math_Image Processing_Vector - Fatal编程技术网

Math 图像线跟踪数学很难解释

Math 图像线跟踪数学很难解释,math,image-processing,vector,Math,Image Processing,Vector,对不起,这个标题让人困惑,我真的很难解释我想要什么。所以我创建了这个图像:) 两个红点是图像上的点。他们之间的距离并不重要 我想做的是,使用两个点的坐标,计算出它们之间的空间角度(如红点之间的黑线所示) 一旦找到角度,在最后一个红点上,创建两个与第一条线的角度相交的点。然后,扫描半个半圆,得到橙色线经过的图像的每个像素的坐标 我不知道这对你们是否有意义,所以我画了另一幅画: 正如你在第二张图中所看到的,我的想法被应用到了一条画在黑色canavs上的线上。两个红点是起始坐标,然后在两个点的末端

对不起,这个标题让人困惑,我真的很难解释我想要什么。所以我创建了这个图像:)

两个红点是图像上的点。他们之间的距离并不重要

我想做的是,使用两个点的坐标,计算出它们之间的空间角度(如红点之间的黑线所示)

一旦找到角度,在最后一个红点上,创建两个与第一条线的角度相交的点。然后,扫描半个半圆,得到橙色线经过的图像的每个像素的坐标

我不知道这对你们是否有意义,所以我画了另一幅画:

正如你在第二张图中所看到的,我的想法被应用到了一条画在黑色canavs上的线上。两个红点是起始坐标,然后在两个点的末端创建一个小于半个半圆。橙色部分显示应记录的图像像素

我不知道如何开始这项工作,因此,如果有人对我的能力或我需要做什么有任何想法,我们非常感谢您的帮助:)

编辑。 我创建这个图像是希望它能让我想做的更清楚:)


再次抱歉,如果这让任何人感到困惑,因为我真的不知道如何解释。

嗯。。。我想我明白你的意思,但如果我错了,请发表评论

我相信蓝点不是真的需要。我认为你的建议是简单地扫描一个圆中的一个点(红点),找到该圆的交点,然后确定该交点与第二个点(另一个红点)的夹角

我想你知道如何计算两个红点之间的角度,这很简单

有许多方法可以计算与圆的交点,蛮力法可以应用如下迭代公式:

x = r * sin(t)
y = r * cos(t)
以第一个红点为中心,其中r是扫描半径

将公式应用于像素网格,您应该能够确定哪些像素是这两个方程的解

应该至少有两个点与圆相交,我认为消除不必要的点应该相当简单(取决于您正在跟踪的线的属性)

现在您可以计算该交点与中心红点的角度。使用这个角度和之前计算的红点之间的角度,得到我相信你想要的


编辑:从实现的角度来看,如果位图足够稀疏,那么在算法上,将所有像素坐标以某种连续方式排列在一个数组中会更加有效。这将使在当前像素的某个半径处搜索相应的像素变得更加简单。

好的,因此开口角度是恒定的,横线仅用于构造。好


您希望使用来选择要扫描的点

首先画出终点。为此,你要做一点像这样的向量数学

  • 设(x,y)为第二个红点的坐标,R为要扫描的半径(您尚未指定,但我假设您知道它是什么),θ为线段与水平面的角度。(如果你需要帮助计算θ,就说)
  • 端点是[+,-]中i的(X_i,Y_i)。在哪里

注意,θ应该运行整个圆(0-360度或0-2π弧度)

然后,使用圆算法拾取像素(如果正在绘制,则为彩色,但在本例中是复制的),并按顺序将其放入数组中。比约恩·斯特朗宁瑟姆是你叔叔。

我只是想澄清一下:

  • 你有两个A点和B点,你需要画一条弧
  • 圆弧应该是四分之一圆(也称为“半个半圆”)
  • 第一个点A是圆弧的中心/旋转点
  • A&B定义的直线应在其中点与圆弧相交
让我们将点A的坐标定义为(Ax,Ay)。 让我们将A和B之间的距离定义为r(圆/弧的半径)

因此,使用圆的基本公式,当

(x-Ax)^2 + (y-Ay)^2 = r^2
现在您只需要将此集合限制在所需的四分之一圆内的点。我建议最简单的方法是在弧中点一定距离内包含点

为此,首先计算出圆弧的中点。让点B由(Bx,by)定义,然后将点C定义为弧的中点(Cx,Cy)

现在,对于圆弧上的任何点,从该点(x,y)到圆弧中点绘制一条弦(圆上两点之间的线)

这条线的长度可以通过圆的半径和两个半径之间的角度来计算。弦的长度公式是2r.sin(a/2),其中r是半径,a是半径之间的角度。我们希望中点两边各成45度,所以最大弦长为

2r.sin(45/2)
所以在2r.sin(45/2)范围内的点(Cx,Cy)足够近,可以画一个四分之一圆。你的结果是

Any coordinate (x, y) such that
(x-Ax)^2 + (y-Ay)^2 = r^2
(x-Cx)^2 + (y-Cy)^2 <= (2r.sin(45/2))^2
任何坐标(x,y),使得
(x-Ax)^2+(y-Ay)^2=r^2

(x-Cx)^2+(y-Cy)^2 Er。。。“使用两个点的坐标,计算出它们之间的空间角度”是不清楚的。从第三点看它们之间的角度?此外,您在每个图形中都显示了一些蓝点,但没有提到任何关于它们的内容。它们是测量“红点之间的角度”的点吗?它们有什么意义吗?请试着更清楚地重复这个问题。我怀疑你脑子里有一些我们不知道的背景。我尽力解释,整个事情有点超出我的理解范围,但我会想出另一个可能的形象
2r.sin(45/2)
Any coordinate (x, y) such that
(x-Ax)^2 + (y-Ay)^2 = r^2
(x-Cx)^2 + (y-Cy)^2 <= (2r.sin(45/2))^2