绘制“平坦”波很容易,但我想画两点x1,y1 x2,y2之间的波
以下是“平面”代码:
package display
{
import flash.display.Sprite;
import flash.events.Event;
public class SineWave extends Sprite
{
private var angle:Number = 0;
private var centerY:Number = 200;
private var range:Number = 50;
private var xspeed:Number = 2;
private var yspeed:Number = .1;
private var xpos:Number
private var ypos:Number
public function SineWave()
{
init()
}
protected function init():void
{
var sinWavePosition = 100;
var cosWavePosition = 200;
var sinWaveColor:uint = 0xFF0000;
var cosWaveColor:uint = 0x00FF00;
var waveMultiplier:Number = 10;
var waveStretcher:Number = 5;
var i:uint;
for(i = 1; i < 500; i++)
{
var sinPosY:Number = Math.sin(i / waveStretcher) * waveMultiplier;
var cosPosY:Number = Math.cos(i / waveStretcher) * waveMultiplier;
graphics.beginFill(sinWaveColor);
graphics.drawRect(i, sinWavePosition + sinPosY, 2, 2);
graphics.beginFill(cosWaveColor);
graphics.drawRect(i, cosWavePosition + cosPosY, 2, 2);
}
}
}
}
答案 0 :(得分:4)
bezier curve怎么样?这本身并不是正弦波。但效果类似。使用适当的控制点,您应该能够使其看起来像正弦波。
答案 1 :(得分:1)
快速作弊是获取点之间的距离,将图形绘制到单独的精灵上,然后计算两点之间的角度并将图形旋转到该角度。 不是最“完美”的解决方案,但应该做到这一点,否则我可以想象,计算出两点之间的角度,然后将其作为现有值的增量添加。
希望这个黑客有所帮助。
答案 2 :(得分:0)
我相信这会起作用,它基本上是一个旋转矩阵,适用于线上的每个点。 乘法的顺序和符号以及atan2的参数可能存在一些错误,但是其他我认为这将有效。
float v = Atan2(y2-y1, x2-x1);
for(blabla)
{
calculate sinPosY from i
newSinPosY = i*Cos(v) + sinPosY*Sin(v);
sinPosX = i*-Sin(v) + sinPosY*Cos(v));
add offset
render
}