Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 数学-获取x&;沿直线间隔的y坐标_Actionscript 3_Math_Coordinates_Algebra - Fatal编程技术网

Actionscript 3 数学-获取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使

我试图以偶数的间隔获得直线(线段)上点的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使台阶变大或变小

计算斜率,得到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)