首先是虚线连接的版本:
参数介绍:起点坐标X,起点坐标Y,终点坐标X,终点坐标Y,贝塞尔的测试点偏角
function scr_bezier_point(argument0,argument1,argument2,argument3,argument4 = 30){
var _xo = argument0,_yo = argument1,_x1 = argument2,_y1 = argument3,_angle = argument4;
// 绘制角度
var _r =360 - point_direction(_xo,_yo,_x1,_y1)
if(_r >= 360)
{
_r -=360
}
// 获取测试点的角度
var _des = point_distance(_xo,_yo,_x1,_y1)
var _r1 = 0,_r2 = 0;
if (_x1 >_xo && _y1<_yo)
{
_r1 = _r + _angle;
_r1 = _r - _angle;
}
else if(_x1 >_xo && _y1>_yo)
{
_r1 = _r + _angle;
_r2 = _r - _angle;
}
else if(_x1<_xo && _y1<_yo)
{
_r1 = _r + _angle;
_r2 = _r - _angle;
}
else if(_x1<_xo && _y1>_yo)
{
_r1 = _r - _angle;
_r2 = _r + _angle;
}
// 一号测试点
var _p1_x = _xo+_des/3*cos(degtorad(_r1))
var _p1_y = _yo + _des/3*sin(degtorad(_r1))
var _p2_x = _xo+_des*2/3*cos(degtorad(_r2))
var _p2_y = _yo + _des*2/3*sin(degtorad(_r2))
// 绘制曲线
var _cx = 3*(_p1_x - _xo)
var _cy = 3*(_p1_y - _yo)
var _bx = 3*(_p2_x - _p1_x) - _cx;
var _by = 3*(_p2_y - _p1_y) - _cy;
var _ax = _x1 - _xo - _cx - _bx
var _ay = _y1 - _yo - _cy - _by
for(var _t = 0;_t<1;_t+=0.01)
{
var _x = _ax*power(_t,3)+_bx*power(_t,2)+_cx*_t + _xo
var _y = _ay*power(_t,3)+_by*power(_t,2)+_cy*_t + _yo
draw_point(_x,_y);
}
}
下面是线段的版本:
function scr_bezier_line(argument0,argument1,argument2,argument3,argument4 = 30){
var _xo = argument0,_yo = argument1,_x1 = argument2,_y1 = argument3,_angle = argument4;
// 绘制角度
var _r =360 - point_direction(_xo,_yo,_x1,_y1)
if(_r >= 360)
{
_r -=360
}
// 获取测试点的角度
var _des = point_distance(_xo,_yo,_x1,_y1)
var _r1 = 0,_r2 = 0;
if (_x1 >_xo && _y1<_yo)
{
_r1 = _r + _angle;
_r1 = _r - _angle;
}
else if(_x1 >_xo && _y1>_yo)
{
_r1 = _r + _angle;
_r2 = _r - _angle;
}
else if(_x1<_xo && _y1<_yo)
{
_r1 = _r + _angle;
_r2 = _r - _angle;
}
else if(_x1<_xo && _y1>_yo)
{
_r1 = _r - _angle;
_r2 = _r + _angle;
}
// 一号测试点
var _p1_x = _xo+_des/3*cos(degtorad(_r1))
var _p1_y = _yo + _des/3*sin(degtorad(_r1))
var _p2_x = _xo+_des*2/3*cos(degtorad(_r2))
var _p2_y = _yo + _des*2/3*sin(degtorad(_r2))
// 绘制曲线
var _cx = 3*(_p1_x - _xo)
var _cy = 3*(_p1_y - _yo)
var _bx = 3*(_p2_x - _p1_x) - _cx;
var _by = 3*(_p2_y - _p1_y) - _cy;
var _ax = _x1 - _xo - _cx - _bx
var _ay = _y1 - _yo - _cy - _by
var _tx = _xo,_ty = _yo;
for(var _t = 0;_t<1;_t+=0.01)
{
var _x = _ax*power(_t,3)+_bx*power(_t,2)+_cx*_t + _xo
var _y = _ay*power(_t,3)+_by*power(_t,2)+_cy*_t + _yo
draw_line_width(_tx,_ty,_x,_y,3);
_tx = _x;
_ty = _y;
}
}
测试后效率还行,主要是向做类似脑图那种连接线;