zszen斑竹在
http://space.flash8.net/bbs/thread-323198-1-1.html写的非常好,本人的这个帖子只不过是他的一点补充,但用本人用的是代数方面的
知识:
先谈一下思路:
(1)先求出p0、p1两点的中点:
代码是:
var zd_p

oint = Point.interpolate(p0, p1, 0.5);
(2)求出直线p0p1的角度:
var p0_p1_jd:Number = Math.atan((p0.y-p1.y)/(p0.x-p1.x));
(3)求出直线p0p1的垂直方向(由N决定弯曲的方向):
var zd_jd:Number = p0_p1_jd+Math.pow(-1, N)*Math.PI/2;
(4)算出控制点(由L决定弯曲的程度):
var kz_p

oint = new Point(zd_p.x+L*Math.cos(zd_jd), zd_p.y+L*Math.sin(zd_jd));
定义成函数:
import flash.geom.Point;
function qx_fc(p0

oint, p1:Point, N:Number, L:Number) {
var zd_p:Point = Point.interpolate(p0, p1, 0.5);
var p0_p1_jd:Number = Math.atan((p0.y-p1.y)/(p0.x-p1.x));
var d:Number = Point.distance(p0, p1);
var zd_jd:Number = p0_p1_jd+Math.pow(-1, N)*Math.PI/2;
var kz_p:Point = new Point(zd_p.x+L*Math.cos(zd_jd), zd_p.y+L*Math.sin(zd_jd));
this.lineStyle(1, 0xff0000, 100);
this.moveTo(p0.x, p0.y);
this.curveTo(kz_p.x, kz_p.y, p1.x, p1.y);
}
效果:
[
本帖最后由 200398sb40whb 于 2008-1-20 12:44 编辑 ]