已知條件:
寬度已知且有限,高度無限的區域內,有n個方格,已知這些方格的x ,y 座標以及寬度w和高度h,方格不重疊需求:
在空間內找個乙個位置,可以放的下乙個固定寬高(如4 x 4)的方格,原則:離原點最近且y軸最上
關鍵點:
位置資訊轉化為二維陣列
目標點:每個已知方格的左下角點 a,右下角點 b,和右上角點 c
目標點位置調整:a點依照高度向左平移,b c點按照寬度向上平移
補充點:原點檢測
具體實現思路:
位置資訊轉化為二維陣列 => 目標點獲取 => 目標點位置調整 => 空間檢測 => 最優點獲取,原則:原點最近 && y軸最上
**實現:
/**
* spotgenerator
* 將該檔案中的 spotgenerator 方法暴露出去以供呼叫
* * 1. 實現思想:位置資訊轉化為二維陣列 => 目標點獲取 => 目標點位置調整 => 空間檢測 => 最優點獲取,原則:原點最近 && y軸最上
* 2. 使用:呼叫spotgenerator(data, column, initialwidth, initialheight) 方法
* 引數:
* 1. data : 型別 array, 現有gird的位置資訊,示例
* 2. column: 型別 number,分割的列數,例如 24
* 3. initialwidth: 型別 number,新新增grid的預設寬度,如 4
* 4. initialheight: 型別 number,新新增grid時預設高度,如 4
* 返回值:
* 最優點的位置座標,型別:object 示例
*///獲取陣列的深度
function getdepth(data)
}//點集填充
function initspotbydata(arr, data) }}
for (var i = 0; i < arr.length; i++)
}return arr;
}//獲取目標點
function gettargetspot(data) );
rightbottom.push();
topright.push()
}return
}//調節目標點的位置
function tunetargetspot(spot, rootarr, initialwidth, initialheight)
break;
case "rightbottom":
for (var i = 0; i < spot[key].length; i++)
break;
case "topright":
for (var i = 0; i < spot[key].length; i++)
break;}}
}//leftbottom的點向左微調,引數 :
function leftbottomtune(spotposition, rootarr, initialheight) ;
}if (find) break;
}return j == 0 ? j : ++j;//調整後的x值
}//rightbottom的點向上微調,引數 :
function rightbottomtune(spotposition, rootarr, initialwidth) ;
}if (find) break;
};return j == 0 ? j : ++j;
}//topright向上調整,引數 :
function toprighttune(spotposition, rootarr, initialwidth) ;
}if (find) break;
};return j == 0 ? j : ++j;//是否是到邊緣
}//檢測是否可以放的下方格 引數 : 返回值true為可以放得下 false為不能放下
function checkroom(spotposition, rootarr, initialwidth, initialheight)
}if (find) break;
}return !find;
}//獲取最終的點的位置
function getfinalspot(spotposition)
//找到最小值的下標
for (var j = 0; j < yarr.length; j++)
}if (indexarr.length == 1) else
//勾股定理取最近的點
for (var k = 0; k < spotarr.length; k++)
for (var p = 0; p < lengtharr.length; p++)
}return spotarr[finalindex];
}}function spotgenerator(data, column, initialwidth, initialheight)
//點集填充
initspotbydata(rootarr, data);
var targetspot = gettargetspot(data);
tunetargetspot(targetspot, rootarr, initialwidth, initialheight);//位置調整
//原點檢測
if (rootarr[0][0] == 0) );
}for (var key in targetspot) }}
var finalspot = getfinalspot(filtertargetspot);
return finalspot;
}//獲取當前滑鼠位置可以容納下的最大方格的尺寸 x:為
function spacecheckbycursor(data,column,x,y)
乙個演算法問題
今天上午上班由於沒什麼事做,就看看書,發現乙個演算法問題,開始看感覺貌似很簡單,但是越想越有意思。1,題目描述 給定乙個十進位制的正整數n,寫下從1開始到n所有出現 1 的個數。例如 n 2 寫下 1 2 出現了乙個1 n 12,寫下1,2,3,4,5,6,7,8,9,10,11,12.這樣1的個數...
c 視窗布局的乙個問題
同事做了乙個msn功能的客戶端工具.在主視窗上有乙個treelist用來顯示聯絡人.每個節點 聯絡人 雙擊時彈出乙個對話方塊,用與和對方互動.可以說這是乙個非常簡單的gui而局 拋開通訊部分 但雙擊節點後彈出的視窗總是自動在後面.當主視窗最大化時用於互動的視窗就看不到了,手動切換非常麻煩.分析 彈出...
揹包問題解析(一) 貪心演算法
一 題目 有n件物品和乙個容量為v的揹包。第i件物品的重量是w i 價值是v i 求解將哪些物品裝入揹包可使這些物品的重量總和不超過揹包容量,且價值總和最大。二 解決思路 本題剛開始的解題的時候,想採取貪心演算法來解決,也就是將放入的物品的價效比按照從高到低進行排序,然後優先放優先順序高的,其次優先...