Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Получить все точки отрезка прямой? (https://javascript.ru/forum/offtopic/52479-poluchit-vse-tochki-otrezka-pryamojj.html)

Gozar 21.12.2014 16:01

Получить все точки отрезка прямой?
 
Как получить все точки отрезка прямой (на canvas)?
Известно x1, y1, x2, y2

Допенькал как получить точки прямой по Алгоритму Брезенхема до 45* градусов. Если переставить x и y можно даже получить все точки до 90*.

Но не могу понять как получить все точки, если x2 < x1 или y2 < y1

Может как-то через отражение?

kobezzza 21.12.2014 16:13

Если я правильно понял задачу, то
http://www.cleverstudents.ru/line_an..._segments.html

рони 21.12.2014 16:15

Gozar,
:write: нарисовать чёрным по белому на невидимом холсте потом прогнать весь холст записав в массив все точки цвета Black не белые

Gozar 21.12.2014 16:22

Цитата:

Сообщение от рони
нарисовать

похоже на здравствуй тормоза! Идея интересная, но мне нужно то, что kobezzza предлагает. У меня нагруженный алгоритм и мне таких плоскостей придется создавать просто дофига, а это точно тормоза


kobezzza,
Хотелось бы в программном коде, а не геометрии. В алгоритмах куча оптимизаций, а я буду изобретать велосипед.

А по Брезенхему не встречался?

По сути мне нужно достроить между точками прямую, точек у меня таких много и они динамически создаются очень быстро.

kobezzza 21.12.2014 16:32

Ну я хз про оптимизации, но есть общая формула:

x / a + y / b = 1


где a и b удаление от начала координат по X и Y, т.е. подставляешь a и b, затем делаешь шаг по X или Y (шаг определяешь сам, например 1px) и вычисляешь второе значение.

Думаю, что есть специальные алгоритмы, но я тут не в теме особо.

Gozar 21.12.2014 16:35

kobezzza,
Спасибо за участие, я формулы видел, а потом посмотрел лекцию по графике и понял, что лучше взять готовый алгоритм, с оптимизацией. Нашел тут на каком-то неизвестном языке програ-я написан, ща попробую переписать :D

рони 21.12.2014 17:27

:write: мысли вслух любой блок анимации на js выдаст необходимый массив точек --даже точность можно регулировать.

Gozar 21.12.2014 17:35

Цитата:

Сообщение от рони
любой блок анимации

У меня нет анимации, зато есть события, которые браузер отлавливает с разрывами, мне нужно соединить точки, где браузер не отлавливает событие перемещения курсора.

рони 21.12.2014 17:48

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>

рони 21.12.2014 18:07

: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, время: 16:19.