**:
直線切割平面
當乙個平面上沒有直線的時候,可以看成被分成了1份;
有1條直線的時候,沒有結點,多了
1部分; 有2
條直線的時候,多了
1個節點,多了
2部分; 有3
條直線的時候,多了
2個節點,多了
3部分;
······
第n條直線 0
1234
節點數0
00+1
1+21+2+3
區域數1
1+11+1+2
1+1+2+3
1+1+2+3+4
也可以理解為當新增第i
條直線的時候,最多可以穿過
i-1條直線,將新的直線分成
i份,而這
i份可以將
i個部分分成
2i份,也就是多了
i各部分。
於是,a[i]=a[i-1]+i;
a[0]=1;
數學公式可以寫為n =1+1+2+3+4+
···+i
=i*(
i+1)
/2+1
v型折線切割平面
(1)第一種思路
折線個數01
23增加節點數00
48增加部分數11
59因為折線的原因,每次新增折線的時候有折點的那部分不會增加分割部分,也就是有幾個節點就會多出幾個部分,而且和折點部分還會再多出乙個,也就是
a[i]=2*2*(i-1)+1+a[i-1];
a[0]=1;
數學公式
第n條折線增加
2*2*(i-1)+1,
第n條折線是分割的部分為n=(
1+4*n-3
)*n/2+1=2n^2-n+1
。()
(2)第二種思路
把折線看成兩條相交的直線,而每次增加直線的時候都會因為折點而少2
個分割部分,於是第i條折線時,n=2i(2i+1)/2-2i+1=2n^2-n+1.
閃電型折線切割平面
與上述內容基本相同,第一種思路a[i]=a[i-1]+9(i-1)+1;a[0]=1;數學公式n=(9(i-1)+2)*n/2+1
對於第i條折線,共有9(i-1)個節點,共產生9(i-1)+1條線把區域一分為2(感覺這裡的加一單純想是很難找出來,所以我的想法是既然知道了前半部分的9(i-1),後面的常數項應該可以通過特例幾個數得出)
第二種思路
對於乙個z,先當作三條線相交,但是很不幸,有一對平行線,所以分割的平面少了1,然後還有兩個反向延長線需要去掉,分隔平面少了4,所以一條z相比l3少了5個平面,因此:l(3n)-5n;(l()為直線分割的公式)
封閉曲線切割平面
因為是封閉曲線,每次切割時要與之前所有的曲線相交,也就是第i個曲線會與i-1個封閉曲線相交,有2(i-1)個交點,多產生2(i-1)個分割部分。
a[i]=a[i-1]+2*(i-1)
a[0]=1
a[1]=2
數學公式n=2*(n-1)*n/2+2
=n^2-n+2
平面切割空間
第i個平面切割i-1個平面,最多與i-1個平面相交,產生i-1條交線,乙個平面將原有空間分成兩個部分,增加乙個新的部分,由前面的結論可知,i-1條交線會將這個平面分成
i*(i-1)/2+1份,於是可知,第i個平面會增加i*(i-1)/2+1部分的空間。記b[i]=i*(i-1)/2+1;a[i]=a[i-1]+b[i];a[0]=1;b[0]=0;a[1]=2;b[1]=1;a[2]=4;b[2]=2;
數學公式為n=(2*1+3*2+4*3+···+i*(i-1))/2+(i-1)+2==
(i^3+5i)/6+1
c 記憶體區域劃分
c 中,記憶體分為5個區域 堆 棧 自由儲存區 全域性 靜態儲存區和常量儲存區。其中 棧 就是那些編譯器在需要的時候分配,不需要的時候清理的變數的儲存區域,比如區域性變數和函式引數。在記憶體中連續儲存的區域,位址從低到高。堆 就是new分配的記憶體塊,需要delete。如果沒有delete,在程式退...
場景劃分區域
為何要對場景進行區域劃分,這個同樣是為了優化碰撞檢測。因為相對於其他邏輯而言碰撞檢測尤其消耗效能,尤其是對網格類的碰撞體進行碰撞檢測時效能開銷更大。試想一下場景中有1000個物體 如果沒有區域劃分的情況,物體兩兩碰撞檢測的次數是 1000 1000次,而如果遊戲幀率達到60,那麼這個碰撞檢測邏輯就達...
圓劃分的區域
畫個圈圈詛咒你!在一次青青草原acm個人賽中,瀟灑哥被喜洋洋以30s罰時壓制,委屈的當了個第二。瀟灑哥蹲在角落說出了他的口頭禪,並畫起了圈圈。突然,他想出了乙個有趣的題目,跑去給喜洋洋做。喜洋洋看到題目後懵逼了,但是看到瀟灑哥臉上欠揍的笑容就不爽,暗想一定要做出來狠狠的打瀟灑哥的臉。於是,他以上廁所...