我想我會張貼此解決方案賦予其優雅和簡潔。
我認爲這裏的關鍵不在於關注「三角」方面,更重要的是要認識到三角形是一個多邊形。這使我們可以使用許多與點和多邊形相關的現有算法來正視這個問題。
此2D圖庫JavaScript 2D Graph Library提供瞭解決此問題所需的所有工具。主要地,每個式樣具有相關聯的功能約束這將經由線段一個連接到形狀的重心約束一個點方式的形狀的內部區域(邊緣包括) 。 (它也像你可以設置中心點爲形狀因爲這將證明得心應手凹多邊形的第二個參數。)
本的jsfiddle Triangle Constraint via jQuery UI Draggable使用jQuery UI的可拖動阻力回調與Graph庫一起進行約束。它實際上使用SVG多邊形的座標來構造圖形多邊形,只反轉Y軸以在屏幕和笛卡爾座標之間切換。
的設立,發生在文件準備是相當簡單:
var points = $('polygon').attr('points').trim().split(' ').map(function(vertex) { var coordinates = vertex.split(','); return new aw.Graph.Point(Number(coordinates[0]), Number(-coordinates[1])); }),
triangle = new aw.Graph.Polygon(points);
$('.map-selector').draggable({
containment: '.map',
drag: function (event, ui) {
var left = ui.position.left, top = -ui.position.top;
var constrained = triangle.constrain(new aw.Graph.Point(left, top));
ui.position.left = constrained.x; ui.position.top = -constrained.y;
}
});
乾杯!
您忘記鏈接您提到的主題 –
另外,您的瀏覽器支持要求是什麼? –
哦,這裏的鏈接:http://stackoverflow.com/questions/8583832/constrain-within-a-triangle 我想嵌入到一個iBook項目作爲一個html部件,所以基本上我認爲任何webkit瀏覽器。 – dpb