• 06 July 2026 (1 messages)
  • @8991861183 #66186 03:49 PM, 06 Jul 2026
    Joined.
  • 07 July 2026 (3 messages)
  • @8806410619 #66192 11:24 AM, 07 Jul 2026
    Joined.
  • @8956917271 #66194 12:13 PM, 07 Jul 2026
    Joined.
  • Все хотят
  • 08 July 2026 (1 messages)
  • @artem_nooovikov #66203 04:45 PM, 08 Jul 2026
    Joined.
  • 13 July 2026 (92 messages)
  • @v_kalachikhin #66217 11:47 AM, 13 Jul 2026
    Интересно, тут есть ещё кто живой?
    А кто в теме или хотя бы недавно учился?
    А то я старый и тупой, и я не понимаю: Почему алгоритм Брезенхема (Bresenham) завершается?
    В классической реализации там один цикл, который делает шаг по x, или шаг по y или оба одновременно. Условием завершения цикла является достижение конечной точки и по x и по y _одновременно_! Понятно, что они достигнут, но кто обещал, что одновременно???
  • а они и не должны достигать одновременно
  • @i2porignal #66219 11:50 AM, 13 Jul 2026
    мне вот интересно кто еще тут в курсе что такое алгорится брезенхема ))
  • @v_kalachikhin #66220 12:31 PM, 13 Jul 2026
    Да я сам неделю как узнал.
    А вот и должны: там условие завершения цикла
    $currX == $maxX and $currY == $maxY

    Ну и кроме того, я же ленивый... Но когда я алгоритм чуть поменял - он, сцуко, завершаться тут же перестал. Я понимаю, почему: x и y достигают конечной точки не одновременно. Но почему оригинальный завершается?
  • Я на нём делал отрисовку линий
  • @JozeffTech #66222 12:42 PM, 13 Jul 2026
    И отрисовку текстур на сходной штуке тоже
  • @JozeffTech #66223 12:44 PM, 13 Jul 2026
    Единственное, я вроде делал просто for по разнице стартовых точек, сначала по х, потом по у
  • а смысл если эта операция теперь делается графическим процессором? Брезенхем это во времена когда надо было пикселы в видеоамяти вручную закрашивать
  • Я софтрендер писал
  • @JozeffTech #66226 12:45 PM, 13 Jul 2026
    Оно сейчас ещё и кривые делает с заливкой
  • @JozeffTech #66227 12:46 PM, 13 Jul 2026
    Уже почти все компоненты готовы, скоро мультик можно будет делать
  • @i2porignal #66228 12:46 PM, 13 Jul 2026
    я помню еще алгоритм брезенхема использовали для векторизации
  • @i2porignal #66229 12:46 PM, 13 Jul 2026
    когда на растровой картинке пытались найти линии
  • @ad9f5ed5 ↶ Reply to #66217 #66230 12:51 PM, 13 Jul 2026
    Если dy<=dx, то всегда делается шаг по х и может быть шаг по y.

    Если dy>dx, то всегда делается шаг по y и может быть шаг по x.
  • @v_kalachikhin #66231 12:52 PM, 13 Jul 2026
    Ну понеслись воспоминания...
    Я, разумеется, не линии на экране рисую. Я рисую прямую на растровой картинке и хочу получить пиксели.
    Код на php такой:
    function bresenhamGlobalPixels($x0, $y0, $x1, $y1){
    $pixels = [];

    $dx = abs($x1 - $x0);
    $dy = abs($y1 - $y0);

    $stepX = ($x0 < $x1) ? 1 : -1;
    $stepY = ($y0 < $y1) ? 1 : -1;

    $err = $dx - $dy;

    while (true) {
    $pixels[] = ['x' => $x0, 'y' => $y0];

    if ($x0 == $x1 and $y0 == $y1) {
    break;
    }

    $e2 = 2 * $err;
    if ($e2 > -$dy) {
    $err -= $dy;
    $x0 += $stepX;
    };
    if ($e2 < $dx) {
    $err += $dx;
    $y0 += $stepY;
    };
    };
    return $pixels;
    };
    Оно работает. Но я не понимаю, как.
  • @ad9f5ed5 #66232 12:52 PM, 13 Jul 2026
    Ну и по определению, мы попадаем в конечную точку.
  • Но где в этом определении, что одновременно по x и по y?
  • @ad9f5ed5 ↶ Reply to #66233 #66234 12:53 PM, 13 Jul 2026
    Что значит "одновременно"? А как может быть не одновременно?
  • потому что мы так x и y ставим
  • @JozeffTech #66236 12:54 PM, 13 Jul 2026
    Оно теперь и лисичек может рисовать
  • Легко. Сперва по одной координате, а потом по другой.
    Условие окончания цикла в приведённом коде сработает только тогда, когда последний шаг - по диагонали. И он, сцуко, всегда по диагонали. Почему?
  • @ad9f5ed5 #66240 12:54 PM, 13 Jul 2026
    Мы одну из координат всегда увеличиваем на 1. Она проходит все значения от начала до конца и все.
  • @i2porignal #66241 12:55 PM, 13 Jul 2026
    идем по x и на каждом шаге y или меняем на 1 или не меняем
  • Только не всегда одну и ту же.
  • @ad9f5ed5 ↶ Reply to #66242 #66243 12:56 PM, 13 Jul 2026
    В смысле? 😁
    Для фиксированного набора x1y1, x2y2 -- одну и ту же.
  • что тут непонятного? по x у нас цикл for с шагом 1 и на каждом шаге принимается решение увеличить y или нет. гарантированно что на последнем шаге н всегда будет равен конченому значению
  • Отлично, по x достигли конца, по y - нет. На следующем обороте x может увеличиться, и привет.
    И так оно и происходит.
  • @ad9f5ed5 ↶ Reply to #66245 #66246 12:58 PM, 13 Jul 2026
    Во первых, по y -- да. Во вторых, зачем увеличивать x, если мы уже до конца дошли?
  • у нас нет цикла по y. только по x. когда там добавить 1 к y мы сами решаем
  • Так не проверяется же, что дошли до конца.
  • @ad9f5ed5 ↶ Reply to #66248 #66249 01:00 PM, 13 Jul 2026
    С чего вдруг?
  • @i2porignal #66250 01:00 PM, 13 Jul 2026
    мы прибавляем 1 к y когда превышает невязку
  • Так если линия от х1у1 до х2у2, то на х2 у2 тоже сто процентов достигнут, максимум за исключением погрешности
  • @i2porignal #66252 01:01 PM, 13 Jul 2026
    идя вдоль x мы эту невязку накпливаем
  • @i2porignal #66253 01:01 PM, 13 Jul 2026
    превысило сразу пррибавляем 1 и невязку зануляем
  • @ad9f5ed5 ↶ Reply to #66253 #66254 01:02 PM, 13 Jul 2026
    Ну она не зануляется, Остаток остается.
  • @i2porignal #66255 01:02 PM, 13 Jul 2026
    а невязку мы перед циклом вычисляем грубо говоря как тангенс
  • ну я несколько упростил
  • Ну вот это ключевое соображение. Кажется, что ещё чуть-чуть, и я пойму...
  • @i2porignal #66258 01:05 PM, 13 Jul 2026
    я этого не касался последние 30 лет ))
  • @i2porignal #66259 01:06 PM, 13 Jul 2026
    ввиду не актульности задач
  • @i2porignal #66260 01:06 PM, 13 Jul 2026
    появление графическиз процессоров полностью изменило картину
  • @v_kalachikhin #66261 01:06 PM, 13 Jul 2026
    Да я бы всю жизнь не касался: я тупой.
  • @i2porignal #66262 01:07 PM, 13 Jul 2026
    ну когда то этим занимался и в видопамять напрямую писал
  • @v_kalachikhin #66263 01:07 PM, 13 Jul 2026
    Ну я же линию на экране рисую. Я глубину получаю из фалов DEM вдоль локсодромии.
  • @i2porignal #66264 01:07 PM, 13 Jul 2026
    неужели для этого нет готовой функции?
  • @v_kalachikhin #66265 01:09 PM, 13 Jul 2026
    Ну вот нет. Даже для высоты, хотя DEM с высотой существуют давно.
  • @v_kalachikhin #66266 01:14 PM, 13 Jul 2026
    Впрочем, есть некий продукт, где эта задача решается. Даже с открытым кодом. Но там такой говнокод на TypeScript, что проще самому написать. Собственно получение пикселей с картинки там в хрен знает какой библиотеке, я даже не докопался.
  • @i2porignal #66267 02:07 PM, 13 Jul 2026
    а вообще сейчас операция рисования пиксела существует или надо рисовать линию с однинаковым началом и концом?
  • @v_kalachikhin #66269 02:32 PM, 13 Jul 2026
    Эээ... Смотря где.... Я же говорю - я ничего не рисую.
  • а что тогда? битмап что ли сделать?
  • @i2porignal #66271 02:36 PM, 13 Jul 2026
    я не уловил конечную цель задачи
  • @v_kalachikhin #66272 02:44 PM, 13 Jul 2026
    Да нет, у меня узкоспециализированная задача.
    Вот есть файлы DEM. Это такая растровая картинка, в которой цветом пикселя закодирована высота земной поверхности, средняя по площади этого пикселя. Сами картинки - это квадратики (тайлы называются), который покрывают поверхность Земли в соответствии с правилами проекции. Конкретно - WGS84. Она кривая, но удобная.
    Прикладная задача состоит в том, чтобы зная положение самолёта или парохода, направление и скорость его движения - определить, не впаяется ли он во что-нибудь в течение заданного времени.
    Алгоритмически это сводится к растеризации отрезка пути пикселями файла DEM. Нуивот.
  • @i2porignal #66273 02:52 PM, 13 Jul 2026
    а расетризация тут зачем? не проще ли пересечения линий считать?
  • @v_kalachikhin #66274 02:53 PM, 13 Jul 2026
    Дык глубина - это точки. Определяем глубину вдоль пути.
  • @i2porignal #66275 04:13 PM, 13 Jul 2026
    если там глубины или высоты вроде бы строят линии уровни. метод "нарисоват и закрасить" а потом смотреть что дает getpixel в данной точке рабочий но медленный
  • Дык в том то весь и цимес, что появились тайлы в формате DEM - сплошное поле параметра, закодированное цветом. Не нужно строить линии уровня и закрашивать - всё уже сделано. Нужно только взять цвет.
    Поэтому я надеюсь, что всё будет работать быстро.
  • @i2porignal #66277 05:47 PM, 13 Jul 2026
    тогда я опять не понимаю какую линию надо рисовать. ну грубо говоря взяли значение цвета в данной точке и сравнили с пороговым значением
  • @i2porignal #66278 05:48 PM, 13 Jul 2026
    тайл я так понимаю это квадрат по русски
  • @i2porignal #66279 05:50 PM, 13 Jul 2026
    или мы прокладываем маршрут про брезенхема и в каждой точке вместо закраски берем значение пиксила с кординатами и сравниваем с пороговым значением. так что?
  • @v_kalachikhin #66280 05:53 PM, 13 Jul 2026
    В данной - это в какой? Вот линия - это и есть набор требуемых точек. В прикладном смысле линия (отрезок, да) - это путь, который потенциально пройдёт судно с текущего момента за, скажем, 10 минут. В текущем направлении с текущей скоростью.
    Если где-то на этом отрезке мы найдём глубину меньше пороговой - объявляем тревогу. Типа - опасность заехать на мель.
    И так - каждое определение положения судна. А современные приёмники ГПС делают это 10 раз в секунду.
  • @v_kalachikhin #66281 05:53 PM, 13 Jul 2026
    Ну да, тайл - это квадрат, конечно, но в русском сегодня - это картографический термин.
  • @i2porignal #66282 05:54 PM, 13 Jul 2026
    у примерно так я и сказал. а нельзя нарисовать картинку с курсом и наложить ее в качестве фильтра?
  • @i2porignal #66283 05:54 PM, 13 Jul 2026
    мне думается так оно будет быстрее чем самопальный брезенхем делать
  • @i2porignal #66284 05:55 PM, 13 Jul 2026
    при условии что счас на дворе не 90-ый год и мы имеем предстввление о шейдерах
  • @v_kalachikhin #66285 05:56 PM, 13 Jul 2026
    А фильтром-то что будет?
    И самопальный Брезенхейм - это вон те 30 строчек. Для остального потребуется ... ну, ещё столько же.
  • я не про то что будет быстрее написать а что будет быстрее работать
  • на картинку со значениями глубин накладываем картинку с курсом а там какая то фнукция отсечения типа если меньше то красим в черный а если больше то в белый
  • @v_kalachikhin #66288 05:59 PM, 13 Jul 2026
    Что до шейдеров - мы, конечно, имеем понятие, но нужно иметь ещё и где эти шейдеры есть. А софтина должна работать на примерно маршрутизаторе - в 10 раз слабее Raspbery Pi и без всякого графического процессора. Облом с шейдерами.
  • @v_kalachikhin #66289 06:00 PM, 13 Jul 2026
    Я понял про фильтр, и это мысль хорошая, но вот требования к аппаратуре....
  • @i2porignal #66290 06:01 PM, 13 Jul 2026
    а ну тогда правильно
  • @i2porignal #66291 06:01 PM, 13 Jul 2026
    брезенхем самое лучшее раз у нас входные данные в виде растра
  • фильтр без шейдеров будет тормозить
  • @i2porignal #66293 06:02 PM, 13 Jul 2026
    ну то есть фактически задача как раз и формулируется что у нас на дворе 90-ый год и современных средств компьютерной графики у нас нет
  • @i2porignal #66294 06:06 PM, 13 Jul 2026
    кстати в почему пых неужели там нельзя как то на си собрать кросс-компиляцией и запустить?
  • @v_kalachikhin #66295 06:09 PM, 13 Jul 2026
    Ну как бы хотелось бы обойтись...
    Это софт для любительской навигации. Типа, яхтсменов. Типа, на борту сервер, который отвечает за всё вот это, который потребляет электричества как фонарик, и второй такой же лежит в железной коробке в рундуке, чтобы когда в основной ударит молния - просто заменить. Такая концепция.
    Несколько условная, но я так вижу.
  • @i2porignal #66296 06:10 PM, 13 Jul 2026
    ну просто если железка настолько слабая то интерпретатор пыха это слишком оверхед
  • @v_kalachikhin #66297 06:10 PM, 13 Jul 2026
    Потому и PHP - не нужно ничего компилировать, занимает мало места и работает быстро. Типа, яхтсмен сжёг свой сервер в жопе мира, пошёл в лавочку, купил другой маршрутизатор, и...
  • @i2porignal #66298 06:13 PM, 13 Jul 2026
    ну я лично помню насколько брезенхем был медленный даже на паскале
  • Да ни хрена. Тут есть реальный опыт.
    А кроме того, наиболее массовая сегодня любительская навигация - вообще на node.js Её на маршрутизатор даже не поставить.
  • @i2porignal #66300 06:14 PM, 13 Jul 2026
    во временя 286-х и доса
  • Ну вот я сейчас прикидываю - вроде ничего... Но уверенности нет.
    Да пофиг - у вот уже почти совсем пенсионер, что мешает мне развлечься?
  • @i2porignal #66302 06:16 PM, 13 Jul 2026
    а питона на железке нету?
  • @v_kalachikhin #66303 06:17 PM, 13 Jul 2026
    А нафига? .Даже микропитон толще, а там вообще ничего нет.
  • потому что он умеет компилировать
  • @i2porignal #66305 06:18 PM, 13 Jul 2026
    соотвественно и скорость будет
  • @v_kalachikhin #66306 06:20 PM, 13 Jul 2026
    Да хрен его знает... Меня этот Цирк Пайтона эстетически не удовлетворяет. Мне на нём писать неприятно. И там сокеты через жопу.
  • а профит то в чем?
  • @v_kalachikhin #66308 07:07 PM, 13 Jul 2026
    А нету профита 😊
  • на яхте то хоть катают? ))
  • 15 July 2026 (3 messages)
  • Да у меня своя... Ну, была. Т.е., теоретически она и сейчас есть, но она в Финляндии. А визу, понятно, не дают.
  • @8862974494 #66317 03:42 PM, 15 Jul 2026
    Joined.
  • 16 July 2026 (1 messages)
  • @Vutshi ↶ Reply to #66272 #66318 02:44 AM, 16 Jul 2026
    Если у вас там поверхность земли в пикселях записана, то почему вы «прямую» чертите, а не геодезическую?