У меня есть два шестиугольника, которые я пытаюсь сделать защелками, когда края достигнут определенного допуска.Найти расстояние между двумя линиями
Как я могу найти, какие края являются ближайшими?
Вот код возврата двух ближайших Шестигранники:
Canvas.getClosestPiece = function(){
var current = {};
current.x = selection.MidPoint.X;
current.y = selection.MidPoint.Y;
smallestDistance = null;
closestHex = null;
hexagons.forEach(function(hexagon){
if(hexagon !== selection){
testPiece = {};
testPiece.x = hexagon.MidPoint.X;
testPiece.y = hexagon.MidPoint.Y;
if((lineDistance(current, testPiece) < smallestDistance) || smallestDistance === null){
smallestDistance = lineDistance(current, testPiece)
closestHex = hexagon
hexagons.forEach(function(hexagon){
hexagon.lineColor = 'grey'
})
hexagon.lineColor = 'red';
}
}
})
// console.log(smallestDistance)
return [selection, closestHex]
}
Расстояние между двумя шестигранными срединных:
function lineDistance(point1, point2){
var xs = 0;
var ys = 0;
xs = point2.x - point1.x;
xs = xs * xs;
ys = point2.y - point1.y;
ys = ys * ys;
return Math.sqrt(xs + ys);
}
А вот стандартная точка массив для одного из них xagons что getClosestPiece возвращает:
Point {X: 658, Y: 284}
Point {X: 704, Y: 304}
Point {X: 704, Y: 354}
Point {X: 658, Y: 375}
Point {X: 613, Y: 354}
Point {X: 613, Y: 304}
Это больше похоже на математическую проблему, чем на проблему программирования. Независимо от того, что вы сделали до сих пор? Вам нужно показать код, чтобы получить справку. –
Это математическая проблема, у меня есть куча кода, не связанная с вопросом, который обрабатывает перетаскивание и расстояние между двумя точками. Что бы вы хотели посмотреть? – Ashbury
Если 100% точных результатов не требуется, вы можете просто вычислить расстояние между центрами шестиугольника, таким образом, приблизив их к кругам. Как только (x1-x2)^2 + (y1-y2)^2 находится под пороговым значением, пусть они защелкиваются. –