2017-02-28 26 views
0

我想通過繪製一組點來顯示用Zone Bit Recording格式化的硬盤盤片的扇區,使用我開發的分區公式。倍頻程 - 可視化優化點繪圖

模型&方程

的盤片是半徑 R的環 & - [R,含有ÑŤ用瀝青同心磁道W¯¯(這樣 N T   =  ⌊( R   -   R)/ W⌋和扇形體的半徑Ñ - [R Ñ   =   - [R   +   W¯¯ * Ñ);這些部門被編號向外。製造過程中允許的最小徑向位間距大號,因此最小徑向扇區間距大號小號   =   8 * 大號 *(小號   +   E)(考慮 S爲512字節)。因爲大號小號不一定劃分 - [R,扇區的最小數(即最內層軌道上)實際上Ñ是S0   =  ⌊ - [R/大號小號&rfloor ;,因此實際最低扇區間距爲大號 S0   =   - [R/Ñ小號

主要的想法是,要向外時,軌道ñ TZ的每一定數量,周長變得足夠大到一個部門增加軌道,仍然保持新的位間距最小以上。這被表示爲

Ñ TZ = ⌈ 大號 S0/W¯¯

這又允許計算區域數ÑŽ作爲

N Z = ⌈ ÑŤ/Ñ TZ ⌉,

磁道的區Ñ作爲

žÑ)=⌊ Ñ/Ñ TZ&rfloor ;,

Ñ作爲軌道的扇區數

Ñ小號Ñ)= Ñ S0 + Z N

代碼

腳本的這一部分是一個相當直接翻譯以前的公式爲策劃:

hold on; axis("equal"); 
parfor z = 0:NZ 
    NS = NS0 + z; 
    G = 2*pi/NS:2*pi/NS:2*pi; 
    R(1:NS) = [25 + W.*z.*TZ:W:25 + W.*TZ.*(z+1)]; 
    polar(G,R,'.r'); 
end 
hold off; 

它並不總是在極線圖回報的東西,有時八度凍結/在較大的輸入上崩潰。

我的主要問題是,我不熟悉不夠用八度矩陣來優化這個(我把我對C和彙編的牙齒),與事實RG必須有相同數目的元素一起。初始化使用R(1:NF)對我來說已經是一個巨大的飛躍。我確信Octave/Gnuplot能夠處理這個腳本產生的數百萬(可能是數億個)點數,但告訴它以有效的方式這樣做是超越我的。

This is an example of what the result should look like.

更新:我意識到上面的代碼甚至不工作。這是一個更新的版本,可以生成合理的輸出,並且不會在保守輸入中崩潰,但仍不會產生確切的圖表。

for z = 0:NZ 
    NF = NFm + z; 
    G(1:TZ,1:NF) = 2*pi*ones(TZ,1)*[1:NF]/NF; 
    R(1:TZ,1:NF) = (25 + W*(z*TZ+[1:TZ]'))*ones(1,NF); 
    polar(G,R,'.r'); 
    clear R G; 
end 
+0

相關的最後一點:http://meta.stackexchange.com/q/291609/346663 –

+0

@MadPhysicist謝謝 –

+0

沒問題。 Imgur現在好了,所以我繼續爲你編輯圖像。 –

回答

0

原來的代碼始終是正確的:

hold on; axis("equal"); 
for z = 0:NZ 
    NF = NFm + z; 
    G(1:TZ,1:NF) = 2*pi*ones(TZ,1)*[1:NF]/NF; 
    R(1:TZ,1:NF) = 25 + W*(z*TZ+[1:TZ]'*ones(1,NF)); 
    polar(G,R,'.r'); 
    clear R G; 
end 
hold off; 

注意hold on;開頭。假設圖形每次都被重新繪製,我會多次運行相同的腳本,導致之前的錯誤結果被繪製。

該代碼也是由我自己嘗試完成矩陣運算符和索引後編寫的,並閱讀了幾個(閱讀:很多)源代碼。

道德:你永遠不能研究太多。