【发布时间】:2015-08-21 16:28:16
【问题描述】:
如何找到从形状内的点到其边界的最长距离。
我特别想找出这些情况的距离:
示例 3(没有圆角的右侧)将是右下角,但我如何计算其他 2?
我正在寻找 JavaScript 解决方案,但我也对基本的逻辑解释感到满意。
这是我用来获取最远角落的脚本:
// the bounding box
var bound = document.getElementById('bound')
var radius = parseInt(getComputedStyle(bound).borderRadius, 10);
// listen to events
bound.addEventListener('mousedown', getFarthest)
/**
* get the fartest point from click to border
**/
function getFarthest(event) {
// get event coordinates
var y = event.layerY;
var x = event.layerX;
// get event dimensions
var w = event.target.offsetWidth;
var h = event.target.offsetHeight;
// get offset
var offsetX = Math.abs(w / 2 - x);
var offsetY = Math.abs(h / 2 - y);
// get delta
var deltaX = w / 2 + offsetX;
var deltaY = h / 2 + offsetY;
// calculate size
var size = Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2) - 2 * deltaX * deltaY * Math.cos(90 / 180 * Math.PI));
event.target.innerText = Math.round(size);
}
【问题讨论】:
-
@ne1410s 见第二行。它从元素中获取半径。还要检查我发布的 codepen 中的示例。
-
您可以简化尺寸计算,只使用Pythagorean theorem 而不是law of cosines,因为
cos(90/180*PI)为零。 -
@GreenGiant thx 给小费..
-
中间的数字永远不会出现,对吧?我相信
border-radius默认为width/2和height/2中的最小值,如果它大于其中之一或两者。 -
@Sumurai8 正确。我的错。