2012-02-06 111 views
2

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

我知道如何两点的直线的y轴截距之间,并且获得斜率的 + B = C ,我不能回忆/想出如何使用斜率或角度得到a和b(x和y)给定c。

visualization

没有人知道一个数学公式找出a和b给出的C,Y-截距和斜率(或角度)? (AS3也很好。)

+0

您的图形精确地描述了该怎么办呢...... – 2012-02-06 04:43:37

+0

找到什么我正在寻找... http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm文章 – 2012-02-06 07:21:25

回答

2

内置到Flash Point类有一套完美的方法来完成你想要的。使用两个点定义线条,并且可以使用“插值”方法自动获取线下方的点,而不使用任何三角函数。

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/geom/Point.html#interpolate()

+1

这大大简化了事情,谢谢! – 2012-02-06 17:54:41

+0

尽管这解决了我的问题,但我很好奇'flash.geom.Point.interpolate'方法的作用。 – 2012-02-06 21:40:18

+0

可能是一堆优化的trig数学,只是在较低的水平。 – 2012-02-06 21:54:31

2

斜率是dy/dx。或者以你的条款A/B。

因此,您可以在Y坐标中添加A,在X坐标中添加B。您可以缩放A和B以使步骤变大或变小。

计算斜率并获得A和B

拿就行了(X1,Y1),两个点(X2,Y2)

A= (Y2-Y1) 
B= (X2-X1) 

如果你计算这个有两点要通过的要采取

STEPS=10 
yStep= A/STEPS 
xStep= B/STEPS 

for (i=0;i<STEPS;i++) 
{ 
    xCur=x1+xStep*i; 
    yCur=y1+yStep*i; 

} 
+0

我认为问题是a和b,因为它们现在是未知量。 – templatetypedef 2012-02-06 04:42:52

2

给出的等式用于线路为y =斜率* X +截距步骤数A和B之间简单地划分来迭代,可以简单地插在x值并回读ÿ的。

您的问题是计算沿着x轴的步长(x方向上的一个16像素移动产生的变化有多大,在您的包含图中是b)。假设你知道一个^ 2 + b^2 = 16(根据定义)和斜率= a/b,你可以计算:

slope = a/b => a = b * slope [乘双方b]

一个^ 2 + b^2 = 16 =>(b *斜率)^ 2 + b^2 = 16 [通过取代来自前一步骤]

我留给你解决b。你有B可以通过计算(X,Y)值后:

for x = 0; x += b 
    y = slope * x + intercept 
    echo (x,y) 
loop 
3

s是斜率。

我们有:1)s^2 = a^2/b^2 ==> a^2 = s^2 * b^2

和:2)a^2 + b^2 = c^2 = 16*16

替代a^2在2)与1):

b = 16/sqrt(s^2+1) 

a = sqrt((s^2 * 256)/(s^2 + 1)) = 16*abs(s)/sqrt(s^2+1) 

在上面,我假设你想得到的长度和b。实际上,您的s是一个有符号值,因此a可能是负值。因此,一个增量值真的会:

a = 16s/sqrt(s^2+1) 
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)