我试图以均匀的间隔获得沿着线(线段)的点的x和y坐标。在我的测试用例中,它是每16个像素,但我们的想法是在ActionScript-3中以编程方式进行。
我知道如何获得两点之间的斜率,一条线的y截距,以及 2 + b 2 = c 2 ,我无法回忆/弄清楚如何使用斜率或角度得到a和b(x和y)给定c。
有没有人知道一个数学公式来计算a和b给定的c,y截距和斜率(或角度)? (AS3也没关系。)
答案 0 :(得分:4)
你有一个三角形:
|\ a^2 + b^2 = c^2 = 16^2 = 256
| \
| \ c a = sqrt(256 - b^2)
a | \ b = sqrt(256 - a^2)
| \
|__________\
b
您也知道(m
是斜率):
a/b = m
a = m*b
从原来的三角形:
m*b = a = sqrt(256 - b^2)
m^2 * b^2 = 256 - b^2
此外,自m = c
起,您可以说:
m^2 * b^2 = m^2 - b^2
(m^2 + 1) * b^2 = m^2
因此:
b = m / sqrt(m^2 + 1)
我很懒,所以你可以自己找a
:a = sqrt(m^2 - b^2)
答案 1 :(得分:3)
让s
成为污点。
我们有:1)s^2 = a^2/b^2 ==> a^2 = s^2 * b^2
和:2)a^2 + b^2 = c^2 = 16*16
用2)替换2中的a^2
:
b = 16/sqrt(s^2+1)
和
a = sqrt((s^2 * 256)/(s^2 + 1)) = 16*abs(s)/sqrt(s^2+1)
在上面,我假设您希望获得a
和b
的长度。实际上,您的s
是有符号值,因此a
可能是否定的。因此,a的增量值实际上是:
a = 16s/sqrt(s^2+1)
答案 2 :(得分:2)
斜率是dy / dx。或者用你的条件A / B.
因此,您可以通过向Y坐标添加A,并将B添加到X坐标来沿着该线步进。您可以缩放A和B以使步骤更大或更小。
计算斜率并得到A和B.
在线(X1,Y1),(X2,Y2)上取两个点
A= (Y2-Y1)
B= (X2-X1)
如果你用两个点进行迭代计算,只需将A和B除以你想要的步数
STEPS=10
yStep= A/STEPS
xStep= B/STEPS
for (i=0;i<STEPS;i++)
{
xCur=x1+xStep*i;
yCur=y1+yStep*i;
}
答案 3 :(得分:2)
给定一条线的等式y = slope * x + intercept,你可以简单地插入x值并读回y。
你的问题是沿着x轴计算步长(x的变化有多大,这是因为沿着这条线的16像素移动,在你所包含的图中是b)。鉴于您知道^ 2 + b ^ 2 = 16(根据定义)和斜率= a / b,您可以计算:
斜率= a / b =&gt; a = b *斜率[将两边乘以b]
a ^ 2 + b ^ 2 = 16 =&gt; (b *斜率)^ 2 + b ^ 2 = 16 [通过前一步骤的替换]
我会留给你解决b。获得b后,您可以通过以下方式计算(x,y)值:
for x = 0; x += b
y = slope * x + intercept
echo (x,y)
loop
答案 4 :(得分:2)
Flash内置的Point类有一套很棒的方法可以完全按照你的意愿去做。使用两个点定义直线,您可以使用“插值”方法自动获取更多点,而不需要任何三角法。
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/geom/Point.html#interpolate()