数学 - 获取x& y沿一条线的间隔坐标

时间:2012-02-06 04:37:20

标签: actionscript-3 math coordinates algebra

我试图以均匀的间隔获得沿着线(线段)的点的x和y坐标。在我的测试用例中,它是每16个像素,但我们的想法是在ActionScript-3中以编程方式进行。

我知道如何获得两点之间的斜率,一条线的y截距,以及 2 + b 2 = c 2 ,我无法回忆/弄清楚如何使用斜率或角度得到a和b(x和y)给定c。

visualization

有没有人知道一个数学公式来计算a和b给定的c,y截距和斜率(或角度)? (AS3也没关系。)

5 个答案:

答案 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)

我很懒,所以你可以自己找aa = 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)

在上面,我假设您希望获得ab的长度。实际上,您的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()