////////////////////////////////////////////////////////////////////////////////////
//代码由roading编写
//根据基点信息计算二次和三次Bezier曲线的点序列
import flash.geom.Point;
class Bezier
{
var p1:Point;
var p2:Point;
var p3:Point;
var p4:Point;
var tp1:Point;
var tp2:Point;
var tp3:Point;
var tp4:Point;
var count:Number;
//init Bezier data
function Bezier(pt1:Point,pt2:Point,pt3:Point,pt4:Point)
{
if(arguments.length < 3)
return;
if(arguments.length == 3){
count = 3;
}
else
{
count = 4;
}
p1 = pt1;
p2 = pt2;
p3 = pt3;
p4 = pt4;
}
// calculate point
function calculate(t:Number)
{
var temp:Point;
//(1-t)*(1-t)*p1+2*t*(1-t)*p2+t*t*p3
//Math.pow(1-t,3)*p1+3*t*(1-t)*(1-t)*p2+3*t*t*(1-t)*p3+Math.pow(t,3)*p4
//二次Bezier
if(count == 3)
{
tp1 = multiply((1-t)*(1-t),p1);
tp2 = multiply(2*t*(1-t),p2);
tp3 = multiply(t*t,p3);
temp = p1.add(tp2);
temp = temp.add(tp3);
}
else
//三次Bezier
{
tp1 = multiply(Math.pow(1-t,3),p1);
tp2 = multiply(3*t*(1-t)*(1-t),p2);
tp3 = multiply(3*t*t*(1-t),p3);
tp4 = multiply(Math.pow(t,3),p4);
temp = tp1.add(tp2);
temp = temp.add(tp3);
temp = temp.add(tp4);
}
return temp;
}
function multiply(num:Number,p:Point):Point
{
var temp:Point = new Point();
temp.x = p.x*num;
temp.y = p.y*num;
return temp;
}
}
//------------------------------------------------------------------------------------------------------------
使用方法:
//根据构造函数的参数来确定二次还是三次的Bezier,第一和最后一个参数是基本点,中间的是控制点...
//50,400,140,20,400,40,635,420
import flash.geom.Point;
var m1 = new Point(50,400);
var m2 = new Point(140,20);
var m3 = new Point(400,40);
var m4 = new Point(635,420);
var b = new Bezier(m1,m2,m3,m4);
for(var i=0;i<=100;i++)
{
trace(b.calculate(i/100));
}
//--------------------------------------------------------
//trace结果
bazier.rar_elliptic curves
版权申诉
16 浏览量
2022-09-21
04:31:30
上传
评论
收藏 1KB RAR 举报
JaniceLu
- 粉丝: 78
- 资源: 1万+
最新资源
- JavaScript《基于自动分析数据并给出营业建议的餐厅管理系统(接入AI) 》+源代码+项目说明及资料
- 355670834783295707ad04e-427f-4cde-9589-e578224a8459.zip
- 动态sql解析引擎,类似mybatis动态sql的功能
- EDA365-Skill-V2.5安装包,支持Allegro17.x版本
- C# 常用单词汇总,常用单词汇总
- 【ERP标准流程-标准流程-库内业务管理】(DOC 14页).doc
- Python《数据库期末作业-餐厅点单系统 》+源代码+设计资料
- 学生成绩管理系统(C++课程设计
- 双指针法判断链表有环-go语言实现
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈