Actionscript 3 数学-获取x&;沿直线间隔的y坐标
我试图以偶数的间隔获得直线(线段)上点的x和y坐标。在我的测试用例中,它是每16个像素一次,但其思想是在ActionScript-3中以编程方式进行 我知道如何得到两点之间的斜率,一条直线的y截距,以及a2+b2=c2,我只是不记得/想不出如何使用斜率或角度来得到给定c的a和b(x和y)Actionscript 3 数学-获取x&;沿直线间隔的y坐标,actionscript-3,math,coordinates,algebra,Actionscript 3,Math,Coordinates,Algebra,我试图以偶数的间隔获得直线(线段)上点的x和y坐标。在我的测试用例中,它是每16个像素一次,但其思想是在ActionScript-3中以编程方式进行 我知道如何得到两点之间的斜率,一条直线的y截距,以及a2+b2=c2,我只是不记得/想不出如何使用斜率或角度来得到给定c的a和b(x和y) 有人知道一个数学公式来计算给定c、y截距和斜率(或角度)的a和b吗?(AS3也可以。)斜率为dy/dx。或者用你的话来说A/B 因此,可以通过将A添加到Y坐标,将B添加到X坐标来沿直线移动。您可以缩放A和B使
有人知道一个数学公式来计算给定c、y截距和斜率(或角度)的a和b吗?(AS3也可以。)斜率为dy/dx。或者用你的话来说A/B 因此,可以通过将A添加到Y坐标,将B添加到X坐标来沿直线移动。您可以缩放A和B使台阶变大或变小 计算斜率,得到A和B 在直线上取两个点(X1,Y1),(X2,Y2) 如果你用你想要迭代的两个点来计算,只需将A和B除以你想要采取的步骤数
STEPS=10
yStep= A/STEPS
xStep= B/STEPS
for (i=0;i<STEPS;i++)
{
xCur=x1+xStep*i;
yCur=y1+yStep*i;
}
步骤=10
yStep=A/步数
xStep=B/步
对于(i=0;i给定直线方程y=slope*x+intercept,您只需插入x值并读回y
您的问题是计算沿x轴的步长(沿直线移动16个像素导致x的变化有多大,在包含的绘图中为b)。如果您知道a^2+b^2=16(根据定义)和斜率=a/b,您可以计算:
斜率=a/b=>a=b*斜率[两边乘以b]
a^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
让s
成为slop
我们有:1)s^2=a^2/b^2==>a^2=s^2*b^2
和:2)a^2+b^2=c^2=16*16
将2)中的a^2
替换为1):
及
在上面,我假设您想要得到a
和b
的长度。实际上,您的s
是一个有符号的值,因此a
可能是负数。因此,a的增量值实际上是:
a = 16s/sqrt(s^2+1)
你有一个三角形:
|\ a^2 + b^2 = c^2 = 16^2 = 256
| \
| \ c a = sqrt(256 - b^2)
a | \ b = sqrt(256 - a^2)
| \
|__________\
b
m*b = a = sqrt(256 - b^2)
m^2 * b^2 = 256 - b^2
您还知道(m
is slope):
从原始三角形:
|\ a^2 + b^2 = c^2 = 16^2 = 256
| \
| \ c a = sqrt(256 - b^2)
a | \ b = sqrt(256 - a^2)
| \
|__________\
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)
Flash内置的Point类有一套非常好的方法,可以完全实现你想要的功能。使用两个点定义直线,您可以使用“插值”方法自动获取直线下方的点,而无需任何三角函数
()我想问题是a和b是什么,因为它们现在是未知量。你的图表准确地描述了如何做到这一点…找到了一篇关于我要找的东西的文章。。。虽然这解决了我的问题,但我很好奇flash.geom.Point.interpolate
方法做了什么。可能是一堆优化的trig数学,只是在一个较低的层次上。嗯。我想我可以每行使用一次插值,然后使用起点和第一个插值点之间的dX,然后将倍数插入y=mx+b
,以获得其余的并节省更复杂的计算。看看所有各种点方法。除了插值,还有很多非常有用的东西。如果你知道你所使用的角度,polar()特别好。我发现两点之间的插值非常简单,不需要三角<代码>p1:点
,原点,和<代码>p2:点终点<代码>a:点是p1和p2之间的点loc:Number
是p1与p2之间的比率,即线下的距离loc=.25
将是从p1到p2距离的四分之一<代码>a.x=p1.x*(1-loc)+p2.x*loc代码>和a.y=p1.y*(1-loc)+p2.y*loc代码>。我尝试了一些loc的值,它似乎有效。我打赌它适用于0-1以外的值。
m^2 * b^2 = m^2 - b^2
(m^2 + 1) * b^2 = m^2
b = m / sqrt(m^2 + 1)