給定x坐標(biāo), 想知道這條藍(lán)色線的傾斜角度
現(xiàn)實(shí)中需求: 緊貼曲線上畫文字, 求個(gè)思路
你的圖像是三階貝塞爾曲線
P0 = [0, 0]
P1 = [-1, 10]
P2 = [8, 10]
P3 = [12, 0]
//(1 - t)^3P0 + 3t(1- t)^2P1 + 3t^2(1 - t)P2 + t^3P3化簡(jiǎn)
//(P3 - 3P2 + 3P1 - P0)t^3 + (3P2 - 6P1 + 3P0)t^2 + (3P1 - 3P0)t + P0
a = P3[0] - 3 * P2[0] + 3 * P1[0] - P0[0]
b = 3 * P2[0] - 6 * P1[0] + 3 * P0[0]
c = 3 * P1[0] - 3 * P0[0]
d = P0[0]
function f(x){
t = Math_yyz.getCubicRoot(a, b, c, d - x);
realt = t.find((n) => n >= 0 && n <= 1 && n !== null)
pm = f1(realt, P0, P1, P2);
pn = f1(realt, P1, P2, P3);
return (pm[1] - pn[1]) / (pm[0] - pn[0]);
}
function f1(t, p0, p1, p2){
return [(1 - t) * (1 - t) * p0[0] + 2 * t * (1 - t) * p1[0] + t * t * p2[0], (1 - t) * (1 - t) * p0[1] + 2 * t * (1 - t) * p1[1] + t * t * p2[1]];
}
f(4)得到x=4的斜率
//求一元三次方程,網(wǎng)上找的
Math_yyz=(function(){
var module={};
function eqZero(x){
return Math.abs(x)<1e-6;
}
var abs=Math.abs;
var pow=Math.pow;
var sqrt=Math.sqrt;
var sign=Math.sign;
var cos=Math.cos;
var acos=Math.acos;
var TwoPi=Math.PI*2;
function getCubicRoot(a,b,c,d){
a=a;
b=b/(3*a);
c=c/(6*a);
d=d/(2*a);
var solve=[null,null,null];
var Alph=-b*b*b+3*b*c-d;
var Beta=b*b-2*c;
var Delt=Alph*Alph-Beta*Beta*Beta;
var R1,R2,tht;
if (eqZero(Delt)){
R1=abs(pow(abs(Alph),1/3))*sign(Alph);
if (eqZero(R1)){
solve[0]=-b;
}
else{
solve[0]=-b+2*R1;
solve[1]=-b-R1;
}
}
else if(Delt>0){
//var tht,R1,R2;
tht=Alph+sqrt(Delt);
R1=abs(pow(abs(tht),1/3))*sign(tht);
tht=Alph-sqrt(Delt);
R2=abs(pow(abs(tht),1/3))*sign(tht);
solve[0]=-b+R1+R2;
}
else if(Delt<0){
//var tht;
tht=acos(Alph/(sqrt(Beta)*Beta));
solve[0]=-b+2*sqrt(Beta)*cos(tht/3);
solve[1]=-b+2*sqrt(Beta)*cos((tht+TwoPi)/3.0);
solve[2]=-b+2*sqrt(Beta)*cos((tht-TwoPi)/3);
}
return solve;
}
module.getCubicRoot=getCubicRoot;
return module;
})();
##########
二階貝塞爾曲線
##########
根據(jù)公式:
Pm(t) = (1-t)P0 + tP1
Pn(t) = (1-t)P1 + tP2
B(t) = (1-t)Pm(t) + tPn(t)
= (1-t)^2 P0 + 2(1-t)tP1+ t^2P2
已知X坐標(biāo)X0
Bx(t) = (1-t)^2 P0x + 2(1-t)tP1x+ t^2P2x = X0 (一元二次方程)求解出t, 并帶入Pm, Pn得到藍(lán)線,求斜率即可,暴力解法北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國(guó)家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
北大課工場(chǎng)是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國(guó)家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國(guó)制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國(guó)職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問(wèn),美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。