Я уже ломаю голову над тем, как сделать эту работу. Я не могу найти примеров этого и фактически никаких предыдущих вопросов. В основном у меня есть 121 миниатюрные изображения (с точно такими же размерами), расположите их в сетке с желобами, и я хочу взять первое изображение и поместить его в центр. (это позволяет использовать сетку изображений 11x11). Затем я хотел бы взять каждое следующее изображение и начать расположить их вокруг центрального изображения, используя следующее ближайшее доступное свободное место к центральному изображению до тех пор, пока все не будут израсходованы. Предполагается, что список изображений будет получен из объекта массива. Каков наиболее эффективный способ сделать это?Каков наиболее эффективный способ упорядочивания изображений радиально с помощью javascript?
ответ
Скорее всего, не самый эффективный способ решения, но я хотел бы играть с ним:
Вы можете перебрать все точки в сетке, вычислить их расстояние до центральной точки, а затем отсортировать точки по этому расстоянию. Преимущество над алгоритмических решений является то, что вы можете использовать все виды дистанционных функций:
// Setup constants
var arraySize = 11;
var centerPoint = {x:5, y:5};
// Calculate the Euclidean Distance between two points
function distance(point1, point2) {
return Math.sqrt(Math.pow(point1.x - point2.x, 2) + Math.pow(point1.y - point2.y, 2));
}
// Create array containing points with distance values
var pointsWithDistances = [];
for (var i=0; i<arraySize; i++) {
for (var j=0; j<arraySize; j++) {
var point = {x:i, y:j};
point.distance = distance(centerPoint, point);
pointsWithDistances.push(point);
}
}
// Sort points by distance value
pointsWithDistances.sort(function(point1, point2) {
return point1.distance == point2.distance ? 0 : point1.distance < point2.distance ? -1 : 1;
});
В результате pointsWithDistances
массив будет выглядеть следующим образом:
[
{x:5, y:5, distance:0},
{x:4, y:5, distance:1},
{x:5, y:4, distance:1},
...
{x:4, y:4, distance:1.4142135623730951},
{x:4, y:6, distance:1.4142135623730951},
...
{x:3, y:5, distance:2},
...
]
перебором массива в таком порядке вы эффективно заполняя сетку от центра наружу.
(. Спасибо за идею Andreas Карлбом, как отобразить эту структуру)
Заканчивать разницу с помощью прямолинейного Расстояния:
// Rectilinear Distance between two points
function distance(point1, point2) {
return Math.abs(point1.x - point2.x) + Math.abs(point1.y - point2.y);
}
Для оболочки -подобной структуре алгоритмических подходов вы можете использовать максимальную метрику:
// 'Maximum Metric' Distance between two points
function distance(point1, point2) {
return Math.max(Math.abs(point1.x - point2.x), Math.abs(point1.y - point2.y));
}
Вы можете играть с кодом здесь: http://jsfiddle.net/green/B3cF8/
Вы ответили на этот вопрос, как я надеялся, что кто-то, спасибо! Возможно, кто-то покажет нам еще более быстрый метод, но тем временем, как бы я пошел на добавление желобов между каждым div, поскольку позиции вычисляются абсолютной позицией в ваших примерах? Добавление поля через CSS не влияет на позиционирование div вокруг него ... – lukas56z
Да, divs в коде jsFiddle абсолютно расположены, а размер размера плитки фиксирован в коде. Я извлек переменную 'tileSize' и обновил пример, посмотрите. –
Спасибо за вашу работу, это меня полностью установило в правильном направлении! Отличный совет! – lukas56z
- 1. Каков наиболее эффективный способ вызова функции backend с помощью JavaScript.
- 2. Каков наиболее эффективный способ перебора объекта javascript?
- 3. Каков наиболее эффективный способ взаимодействия с Singleton?
- 4. Каков наиболее эффективный способ заполнения списка?
- 5. Каков наиболее эффективный способ предварительной загрузки изображений и таблиц стилей?
- 6. Каков наиболее эффективный способ хранения 500 000 изображений?
- 7. Каков наиболее эффективный способ хранения маяков аналитики?
- 8. Каков наиболее эффективный способ обрезать эту таблицу?
- 9. Каков наиболее эффективный способ сортировки NSSet?
- 10. Каков наиболее эффективный способ фильтрации DataFrame
- 11. Наиболее эффективный способ получения изображений с помощью jQuery AJAX
- 12. Каков наиболее эффективный способ фильтрации поиска?
- 13. Каков наиболее эффективный способ хранения этих данных?
- 14. Каков наиболее эффективный способ отправки виртуальной машины?
- 15. Каков наиболее эффективный способ получить узлы листа с помощью jQuery
- 16. Каков наиболее эффективный способ отображения многих компонентов с помощью FlowLayout?
- 17. Каков наиболее эффективный способ переключения значения localStorage с помощью букмарклета?
- 18. Каков наиболее эффективный способ сквоивать массив javascript связанных записей?
- 19. Каков наиболее эффективный способ добавления метаданных schema.org
- 20. Каков наиболее эффективный способ запроса MongoDB?
- 21. Каков наиболее эффективный способ загрузки пользовательского каталога?
- 22. Каков наиболее эффективный способ организовать множество методов?
- 23. Каков наиболее эффективный способ обработки этой функции?
- 24. Каков наиболее эффективный способ перенаправления запросов?
- 25. Каков наиболее эффективный способ сохранения списков?
- 26. Каков наиболее эффективный способ сохранения HashMap?
- 27. Каков наиболее эффективный способ синхронизации двух datagridviews?
- 28. Каков наиболее эффективный способ создания отчета?
- 29. Каков наиболее эффективный способ работы с камерой Android?
- 30. Каков наиболее эффективный способ переопределить Bootstrap css?
Это называется "заполнить матрицу в спиральном порядке". Попытайтесь погулять, есть много решений. – georg
Это может быть даже не актуально, но я был заинтригован вашим вопросом и взломал сценарий jQuery, чтобы сделать это - на всякий случай, если кто-то заинтересован, я оставлю его здесь: http://jsfiddle.net/PxLAV/2/ –
Спасибо большое за ваш вклад Андреас! – lukas56z