[AS3] 用 r = a(1
希望大家能帮忙改瘦点,下面改成尖的(像扑克里面的红桃 图形一样),谢谢
public function Demo21()
{
super();
var angle:Number;//储存极角
var dist:Number;//储存极径
var sin:Number;
var cos:Number;
var heartX:Number = 100;//心形中点的坐标
var heartY:Number = 50;
var heartSize:Number = 100;//心形的大小
var g:Sprite = new Sprite();
g.graphics.lineStyle(1,0x00ff00,10);//线条样式
g.graphics.moveTo(heartX - heartSize, heartY);
for (var i:int = 1; i < 360; i++) {
//计算极角和极径
angle = Math.PI * i / 180;
sin = Math.sin(angle);
cos = Math.cos(angle);
dist = heartSize * (1 - sin);
//将极坐标转化为直角坐标并画线
g.graphics.lineTo(heartX - dist * cos, heartY - dist * sin);
}
addChild(g);
}
[解决办法]
标准的方程就是这么丑的。画好看一点,用一个长短轴比为2:1的椭圆,旋转45度,沿中线切开两半,其中的一半上下翻转。
public function Demo21()
{
super();
var angle:Number;//储存极角
var dist:Number;//储存极径
var sin:Number;
var cos:Number;
var heartX:Number = 150;//心形中点的坐标
var heartY:Number = 150;
var heartSize:Number = 100;//心形的大小
var g:Sprite = new Sprite();
g.graphics.lineStyle(1,0x00ff00,10);//线条样式
//g.graphics.moveTo(heartX - heartSize, heartY);
var A:Number = Math.PI/4;
var X:Number;
var Y:Number;
var lastX:Number;
for (var i:int = 0; i <= 360; i++) {
//计算极角和极径
angle = Math.PI * i / 180;
//sin = Math.sin(angle);
//cos = Math.cos(angle);
//dist = heartSize * (1 - sin);
//将极坐标转化为直角坐标并画线
//g.graphics.lineTo(heartX - dist * cos, heartY - dist * sin);
//心形
X=2*Math.cos(angle)*Math.cos(A) - Math.sin(angle)*Math.sin(A);
Y=2*Math.cos(angle)*Math.sin(A) + Math.sin(angle)*Math.cos(A);
if(X>0)
{
Y = -Y;
}
if (i==0
[解决办法]
lastX * X < 0)
{
g.graphics.moveTo(heartX + X*50, heartY + Y*50);
}
else
{
g.graphics.lineTo(heartX + X*50, heartY + Y*50);
}
lastX = X;
}
addChild(g);
}