• Как обеспечить выбор объектов с изображения?

    pashak
    @pashak
    Если честно, пытаться разобрать изображение на кусочки с помощью алгоритмов — слишком дурацкая затея, потому что на написание кода уйдёт очень много времени, особенно на разборку частных случаев, да и стрелочки на картинке не в тему — будут мешать разбору изображения. Я предлагаю компромиссный вариант: напишите модуль на JavaScript по грубой ручной расстановке областей на картинке (например, поверх картинки кладётся canvas, а вы на нём рисуете прямоугольники, которые и будут подъобъектами). После завершения работы:
    1) вы будете работать с этой же картинкой, т.е. качественно она не изменяется, не разбивается на несколько и т.п.;
    2) вы реализуете map-area области, координаты которых будут базированы на вашей разметке, в т.ч. как моментальный предпросмотр;
    3) вы не работате со сложными продуктами (в т.ч. проприетарными), и не бегаете по цепочке типа «фотошоп»-«проводник»-«браузер».

    Чтобы вы могли оценить время написания, говорю, что для написния вот такой штуки, у меня ушло 2 дня:

    Но её основное предназначение — рисовать разные фигуры, а у вас только прямоугольники (и, возможно, овалы), так что при достаточном навыке за день справитесь.
    Конечно, если объём работы огромен, то это не предложение, но для нескольких десятков изображений сойдёт.
    Ответ написан
    Комментировать
  • Array.sort или сортировка массивов?

    pashak
    @pashak
    1) Сравнение массивов. Как отмечал haaji, выражение []==[] ложно. Всё дело в том, что сравниваются 2 совершенно разных массива (заданные первыми и вторыми квадратными скобками), а так как массивы являются объектами, то и проверяются они по ссылке, а значит, они в данном случае не будут равны. Если хотите сравнить 2 массива с простыми (нессылочными типами: числами, строками, true/false) значениями внутри, то можно преобразовывать массив в строку, с использованием метода join и потом сравнивать уже строки.

    console.log([1,2,3].join(",")==[1,2,3].join(","));

    Если содержатся ссылочные типы, то в любом случае нужно будет сравнивать поэлементно. Можно использовать JSON.stringify, но там есть свои особенности (например, порядок определения свойств).

    2) Сортировка массивов. Array.prototype.sort может принимать в качестве аргумента функцию, в которую будут переданы 2 аргумента — элементы массива, и данная функция должна вернуть -1, 0, 1 в зависимости от того, какой элемент считать большим, либо равными (0). После вызова sort массив, для которого она была вызвана, будет изменён. Если sort не приняла функцию-сортировщик, то элементы массива сравниваются как элементарные значения.

    Обобщая эти 2 пункта:

    var a = [2, 3, 1],
    	a1= [3, 2, 1];
    console.log(a.sort().join(",")===a1.sort().join(","));
    
    Ответ написан
    6 комментариев