Matrix 貝塞爾曲線

2021-06-23 01:58:01 字數 2636 閱讀 2720

new matrix();

prerotate()等           在設定之前進行變換

setscale()等             設定變換動畫

postrotate()等           在設定之後進行變換

假設我們已經求得了包含黃色區域和藍色區域的path, 假設為mpath0,那麼綠色區域則可以使用

canvas.clippath(mpath0, region.op.xor)來剪裁繪製;

而藍色區域則可以通過使用(假設黃色區域的path為mpath1)

canvas.clippath(mpath0);  

canvas.clippath(mpath1,region.op.difference); //繪製第一次不同於第二次的區域

下面我們來研究如何求取mpath0:

上圖黃色和藍色區域的mpath0,可以通過以下獲取:

mpath0.moveto(jx, jy);  

mpath0.quadto(hx, hy, kx, ky);  

mpath0.lineto(ax, ay);  

mpath0.lineto(bx, by);  

mpath0.quadto(ex, ey, cx,cy);     

mpath0.lineto(fx, fy);  

mpath0.close(); 

接著就是要求出繪製path0所需的各個頂點。

我們已知的條件是:a點座標(觸控點),f點座標(顯示介面的大小),直線eh是af的垂直平分線。

剩下的就變成數學問題啦~~

先來求出g點座標因為g為af中點:

顯然gx=(ax+fx)/2; gy=(ay+fy)/2;

e點座標:

新增補助線gm,m點座標為(gx, mheight);

由相似垂直三角形egm和gmf可知:

em=gm*gm/mf;

這樣e點座標為:(gx-em, mheight)

同理可以求出h點座標。

c點座標:

為簡化計算,我們令n點為ag中點,這樣有三角形cjf和ehf得:

cx=ex- ef/2 ;

c點座標為:(ex- ef/2,mheight)

同理求得j點座標。

以下推導需要較多的數學知識,不記得的童鞋,自覺複習去~~

一條直線的函式為:

y=ax+b;

通過已知兩點求直線:  a = (y2-y1)/(x2-x1);

b = (x2*y1-y2*x1)/(x2-x1);

兩條相交直線交點的座標為:x= (b2-b1)/(a1-a2);

y=a1x+b1或者y=a2x+b2

綜上,4點相交的直線的交點為:

x=( (x4*y3-y4*x3)/(x4-x3)-(x2*y1-y2*x1)/(x2-x1))/

((y2-y1)/(x2-x1)- (y4-y3)/(x4-x3) )

= ( (x4*y3-y4*x3) (x2-x1)- (x2*y1-y2*x1)(x4-x3) ) /

( (y2-y1) (x4-x3)- (y4-y3) (x2-x1) )

將之前求得的 a,e,c,j四個點帶入上式則可以求出 b. 同理可求k點。

d點座標:

d為pe的中點,所以:

dx=((cx+bx)/2+ex)/2

dy=((cy+by)/2+ey)/2

同理可求 i 點。

tabactivity    gettabhost();獲得對應activity的tabhost

自帶了tabhost的activity,適用於整體結構是tabhost的布局,獲得對應activity的tabhost。

顯示內容    setcurrenttab(index)   設定id為index的內容

setcurrenttabbytag(tag)  按照標籤設定對應的tab內容

setup(activitygroup)   從布局中獲取後需要被建立

setontabchangedlistener  設定標籤切換監聽,voidontabchanged(string tabid)     需要重寫該方法。

addtab(tabspec)    新增tab

clearalltabs()    清空有內容

getcurrenttab()獲得對應的內容

getcurrenttabtag() 獲得對應標籤的文字

getcurrenttabview() 獲得對應標籤檢視

gettabcontentview() 獲得對應內容檢視

gettabwidget()  獲得標籤

newtabspec(tag)  建立新的tab內容,tag為唯一識別標識,返回值為tabspec物件,可連續設定。setindicate(view),setcontent()設定內容

getchildat(index) 獲得第幾個對應標籤的view

getchildcount()  獲得一共有幾個標籤

onfocuschange(v, hasfocus)  可以被重寫,獲得哪個標籤獲得了熱點

setcurrenttab(index) 按序號設定當前tab

setenabled(enabled) 設定是否可選

setdividerdrawable(drawable)  設定標籤間影象

貝塞爾曲線

1.概述 貝塞爾曲線 b zier curve 又稱 貝茲曲線或貝濟埃曲線,是應用於二維圖形應用程式的數學曲線。一般的向量圖形 軟體通過它來精確畫出曲線,貝茲曲線由 線段與節點組成,節點是可拖動的支點,線段像可伸縮的皮筋,我們在繪圖工具上看到的鋼筆工具就是來做這種向量曲線的。貝塞爾曲線是計算機圖形學...

貝塞爾曲線

由於工作需要,最近在研究乙個類似qq訊息劃掉的效果 很多強迫症患者童鞋對這個簡直是愛不釋手,當然這個也包括我自己 貝塞爾曲線就是這樣的一條曲線,它是依據四個位置任意的點座標繪製出的一條 光滑曲線 在歷史上,研究貝塞爾曲線的人最初是按照已知曲線 引數方程 來確定四個點的思路設計出這種向量曲線繪製法。貝...

貝塞爾曲線

貝塞爾曲線在android中運用廣泛,可以用來繪製各類複雜曲線,因為貝塞爾曲線只需要指定控制點,就能繪製出特定的曲線。其次是做點和點的平滑過渡。為什麼可以做到如上兩點,看下面的講解 首先來說,貝塞爾曲線有階的概念,這個階可以理解為控制點,一階的控制點只有兩個。如上是一階的方程,其中t取值為0到1,可...