Image Line Trace Math Help Hard To Explain
很抱歉,标题令人迷惑,我真的很难解释我想要什么。所以我创建了这张图片:)
好的,所以两个红色点是图像上的点。它们之间的距离并不重要。
我想做的是,使用两个点的坐标,计算出它们之间的间隔angular(如红色点之间的黑线所示)。
然后,一旦找到angular,则在最后一个红点上创建两个与第一条线的angular交叉的点。然后从中扫描一个Half半圆并获取橙色线通过的图像的每个像素的坐标。
我不知道这对您来说是否有意义,所以我画了另一幅画:
您可以在第二张图片中看到,我的想法被应用到了一条在黑色canavs上绘制的线条上。两个红色点是起始坐标,然后在两个点的末尾创建一个小于一半的半圆。橙色部分显示应记录的图像像素。
我不知道如何开始,所以如果有人对我的能力或需要做的事情有任何想法,则非常感谢您的帮助:)
编辑。
我创建了此图像,希望它可以使我尝试做的事情更加清晰:)
如果这让任何人感到困惑,请再次表示歉意,因为我真的不知道该怎么解释。
只需要澄清一下:
-
你有两点
好的,因此打开angular是恒定的,并且横向线仅在此处用于构造。好。
您想使用Bresenham圆选择要扫描的点。
首先计算终点。为此,您可以像这样进行一些矢量数学运算
- 令(x,y)为第二个红点的坐标,R为您要扫描的半径(您尚未指定,但我假设您知道它是什么),而theta是该angular从水平线段。 (如果需要确定theta的帮助,请说)
- 在[,-]中,i的端点是(X_i,Y_i)。在哪里
1
2
3
4X_+ = x + R*cos(theta + 70) // angles expressed in degrees for ease here,
Y_+ = y + R*sin(theta + 70) // your language probably expects radians
X_- = x + R*cos(theta - 70)
Y_- = y + R*sin(theta - 70)请注意theta应该绕整个圆(0--360度或0-2 \\\\\\\\ pi弧度)。
然后,您可以使用圆算法选择要按顺序放入数组中的像素(如果您正在绘制,则会被着色,但在这种情况下将被复制)。 Bjorn Strongingthearm是你的叔叔。
嗯...我想我知道你想做什么,但是如果我做错了,请发表评论。
我相信这些蓝点并不是真正需要的。我认为您的建议是简单地绕圆中的一个点(红点)扫描,找到该圆的相交点,并确定该相交的angular与第二个点(另一个红点)的angular。
我想您知道如何计算两个红点之间的angular,这很简单。
有多种计算圆的交点的方法,蛮力方法是应用迭代公式,如:
1
2x = r * sin(t)
y = r * cos(t)以第一个红点为中心,其中r是您的扫描半径。
将公式应用于像素网格,您应该能够确定哪些像素是两个方程的解。
应该至少有2个与圆相交的点,我认为消除不必要的点应该很简单(取决于要跟踪的线的属性)。
现在,您可以计算该相交点和中心红点的angular。使用该angular和以前计算出的红点之间的angular,可以得到我想要的。
编辑:从实现的angular来看,如果您的位图足够稀疏,则将所有像素坐标放入数组中(以某种连续方式排序)在算法上会更加有效。这将使从当前像素开始以一定半径搜索相应像素变得更加简单。