# BezierMathUtils **Repository Path**: eran/BezierMathUtils ## Basic Information - **Project Name**: BezierMathUtils - **Description**: 和贝塞尔曲线相关的数学公式 - **Primary Language**: ActionScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 7 - **Forks**: 3 - **Created**: 2014-08-08 - **Last Updated**: 2022-02-20 ## Categories & Tags **Categories**: mathlibs **Tags**: None ## README #BezierMathUtils ![我的头像](Intro.png) ### 介绍 ### BezierMathUtils是用来提供计算贝塞尔曲线时候需要用到的数学公式。 比如存在如下需求: 有两点坐标A和B,希望某一个物品从A点移动到B点. 移动方式希望采用贝塞尔曲线. 此时如何可以找到AB之间合适的控制点M(或M')成为解决这个问题的关键 ### 函数 ### 本类库提供的两个函数正是为了解决这样的问题而设计的 ``` public static function calculateABLinePerpendicularBisectorPointByOffsetPercent(...){} public static function calculateABLinePerpendicularBisectorPoint(...){} ``` ### 说明 ### 两个函数的作用都是确定点M坐标,从而确定贝塞尔曲线的控制点 > - 给定AB两点坐标,同时指定其垂直平分线上的点M到AB中点之间的距离 M点满足条件: > - 一定在AB直线的垂直平分线上 > - M点到AB中点O的长度MO为固定值,又调用函数指定 > - 指定方式分为两种: > - 1`直接指定Offset(不推荐) **注意** function calculateABLinePerpendicularBisectorPoint 中接收的参数为offset的平方 > - 2`指定Offset是线段AB长度的百分比 调用函数: calculateABLinePerpendicularBisectorPointByOffsetPercent ### ISSUE ### > - iamzealotwang@126.com --- ### 原理 ### **注意! 以下内容为算法实现原理 首先无任何用处 其次需要有中学数学水平-.- ** #### 用到的公式 ##### 1) [一元二次方程组的标准解](http://zh.wikipedia.org/wiki/%E4%B8%80%E5%85%83%E4%BA%8C%E6%AC%A1%E6%96%B9%E7%A8%8B) ![公式:](http://upload.wikimedia.org/math/4/c/9/4c9a3d1eea268a3efdb2d398062a7da1.png) 2) [已知线段AB求其垂直平分线](http://zhidao.baidu.com/link?url=gRi3nLEyBM-bU1dYX817U0QZkDhhBqGbaN1bTxaYsGsY3gCmOdSeFgFxCJLFGacX77sed3sylElGWOiLz4PNna) 公式: y=-(x2-x1)/(y2-y1)* [x-(x1+x2)/2]+(y1+y2)/2 3) [线段中点坐标求法](http://baike.baidu.com/view/1104188.htm?fr=aladdin) > - 这里补充说明一下,首先地址Link过去的百度帖子少了一个括号,上面的公式中我已经补全 > - 线段AB的垂直平分线在线性代数中满足逻辑:该函数上面任意一点M到线段AB端点的距离相等 > - 因此可以根据这个逻辑建立等式=> ( X - Ax )^2 + ( Y - Ay )^2 = ( X - Bx )^2 + ( Y - By )^2 > - 推导结果=> > - y = [ ( Ax^2 + Ay^2 ) - ( Bx^2 + By^2 ) ] / 2 * ( Ay -By ) - ( Ax - Bx ) / ( Ay - By ) X > - 我用该公式尝试了几组数据均正常,但是在代码中由于数值过大导致Number溢出 所以不适合用作计算。在网上找的公式应该为我推导出的公式的简化版,具体是否我也不知。如有了解请告知 谢谢 --- 解: 根据公式3 得到直线AB的中点坐标O,其O点坐标的X,Y坐标分别用E,F代替 则: 4) (X-E)^2 + (Y-F)^2 = offset^2 连立等式 2) , 4) 可以求解出最后的X,Y 因为最后为 AX^2 + BX + C = 0 的标准一元二次方程组 所以解为两个,通过最上方的图片也可以看出解值为2两个