|
Получить все точки отрезка прямой?
Как получить все точки отрезка прямой (на canvas)?
Известно x1, y1, x2, y2 Допенькал как получить точки прямой по Алгоритму Брезенхема до 45* градусов. Если переставить x и y можно даже получить все точки до 90*. Но не могу понять как получить все точки, если x2 < x1 или y2 < y1 Может как-то через отражение? |
Если я правильно понял задачу, то
http://www.cleverstudents.ru/line_an..._segments.html |
Gozar,
:write: нарисовать чёрным по белому на невидимом холсте потом прогнать весь холст записав в массив все точки цвета |
Цитата:
kobezzza, Хотелось бы в программном коде, а не геометрии. В алгоритмах куча оптимизаций, а я буду изобретать велосипед. А по Брезенхему не встречался? По сути мне нужно достроить между точками прямую, точек у меня таких много и они динамически создаются очень быстро. |
Ну я хз про оптимизации, но есть общая формула:
x / a + y / b = 1 где a и b удаление от начала координат по X и Y, т.е. подставляешь a и b, затем делаешь шаг по X или Y (шаг определяешь сам, например 1px) и вычисляешь второе значение. Думаю, что есть специальные алгоритмы, но я тут не в теме особо. |
kobezzza,
Спасибо за участие, я формулы видел, а потом посмотрел лекцию по графике и понял, что лучше взять готовый алгоритм, с оптимизацией. Нашел тут на каком-то неизвестном языке програ-я написан, ща попробую переписать :D |
:write: мысли вслух любой блок анимации на js выдаст необходимый массив точек --даже точность можно регулировать.
|
Цитата:
|
Gozar,
<script> var x = 5, y = 5, x2 = 2, y2 = -10; var time = Math.abs(x - x2); for (var i=0; i<=time; i++) { var delta = i/time ; var a = delta*(x2 - x) + x; var b = delta*(y2 - y) + y; document.write([a,b]+"<br>") } </script> |
:write:
<script> var x = 50, y = 50, x2 = 20, y2 = -10; var time = Math.max( Math.abs(x - x2), Math.abs(y - y2));//для повышения точности выбираем что сильнее изменилось, для ускорения выбор наоборот min for (var i=0; i<=time; i++) { var delta = i/time ; var a = delta*(x2 - x) + x; var b = delta*(y2 - y) + y; document.write([Math.round(a),Math.round(b)]+"<br>") } </script> |
Часовой пояс GMT +3, время: 02:08. |
|