21.12.2014, 16:01
|
|
猫
|
|
Регистрация: 07.06.2007
Сообщений: 7,504
|
|
Получить все точки отрезка прямой?
Как получить все точки отрезка прямой (на canvas)?
Известно x1, y1, x2, y2
Допенькал как получить точки прямой по Алгоритму Брезенхема до 45* градусов. Если переставить x и y можно даже получить все точки до 90*.
Но не могу понять как получить все точки, если x2 < x1 или y2 < y1
Может как-то через отражение?
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
|
|
21.12.2014, 16:13
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
|
|
21.12.2014, 16:15
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,130
|
|
Gozar,
нарисовать чёрным по белому на невидимом холсте потом прогнать весь холст записав в массив все точки цвета Black не белые
Последний раз редактировалось рони, 21.12.2014 в 16:17.
|
|
21.12.2014, 16:22
|
|
猫
|
|
Регистрация: 07.06.2007
Сообщений: 7,504
|
|
Сообщение от рони
|
нарисовать
|
похоже на здравствуй тормоза! Идея интересная, но мне нужно то, что kobezzza предлагает. У меня нагруженный алгоритм и мне таких плоскостей придется создавать просто дофига, а это точно тормоза
kobezzza,
Хотелось бы в программном коде, а не геометрии. В алгоритмах куча оптимизаций, а я буду изобретать велосипед.
А по Брезенхему не встречался?
По сути мне нужно достроить между точками прямую, точек у меня таких много и они динамически создаются очень быстро.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Последний раз редактировалось Gozar, 21.12.2014 в 16:25.
|
|
21.12.2014, 16:32
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Ну я хз про оптимизации, но есть общая формула:
x / a + y / b = 1
где a и b удаление от начала координат по X и Y, т.е. подставляешь a и b, затем делаешь шаг по X или Y (шаг определяешь сам, например 1px) и вычисляешь второе значение.
Думаю, что есть специальные алгоритмы, но я тут не в теме особо.
|
|
21.12.2014, 16:35
|
|
猫
|
|
Регистрация: 07.06.2007
Сообщений: 7,504
|
|
kobezzza,
Спасибо за участие, я формулы видел, а потом посмотрел лекцию по графике и понял, что лучше взять готовый алгоритм, с оптимизацией. Нашел тут на каком-то неизвестном языке програ-я написан, ща попробую переписать
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
|
|
21.12.2014, 17:27
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,130
|
|
мысли вслух любой блок анимации на js выдаст необходимый массив точек --даже точность можно регулировать.
|
|
21.12.2014, 17:35
|
|
猫
|
|
Регистрация: 07.06.2007
Сообщений: 7,504
|
|
Сообщение от рони
|
любой блок анимации
|
У меня нет анимации, зато есть события, которые браузер отлавливает с разрывами, мне нужно соединить точки, где браузер не отлавливает событие перемещения курсора.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
|
|
21.12.2014, 17:48
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,130
|
|
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 в 17:56.
|
|
21.12.2014, 18:07
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,130
|
|
<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>
|
|
|
|