Pull to refresh
9
0

Оптимизация веб-сервиса подсказок для почтовых адресов и ФИО

«С++ имеет смысл использовать только если доказано, что приложение значительное время проводит вычисляя что-то процессором».

Не только. С/С++ абсолютно обосновано часто используется при написании веб-интерфейса для wifi-роутеров (да и наверное не только wifi; и наверное не только роутеров, а и вообще маленького сетевого железа, которое можно настраивать), потому, что это работает быстрее и занимает меньше места на несчастных 2/4/8 Мб флеш-памяти

Интерполяция: рисуем плавные графики с помощью кривых Безье

Все правильно. Но ничего плохого не произойдет, если не брать растояние до опорных точек большим. Собственно, как Вы и говорили

Интерполяция: рисуем плавные графики с помощью кривых Безье

Сплайн Катмулла-Рома, кстати, очень похоже отрисовывает

Интерполяция: рисуем плавные графики с помощью кривых Безье

Так у меня же через геометрию все...)

Я про сплайны Акимы до той статьи и не слышал

Интерполяция: рисуем плавные графики с помощью кривых Безье

Конечно.
Ваша реализация — это сплайн Катмулла-Рома?

Интерполяция: рисуем плавные графики с помощью кривых Безье

Ваш зверь пошустрее будет)

P.S.: Разве что выиграю за счет того, что у меня промежуточные точки встроенная функция отрисовывает, а у Вас — цикл с lineTo()

Интерполяция: рисуем плавные графики с помощью кривых Безье

Надо посоображать про это все. И попробовать в коде.
Я наверное до завтра break сделаю. А на завтра попробую что-то родить. Интересно с этим всем получается)

Интерполяция: рисуем плавные графики с помощью кривых Безье

Не то. Эти отрезки изначально не равны (если идти от равенства ∠BAB1=∠CAC1). Можно попробовать сохранять сдвиг опорных точек по X и по Y относительно точки A… И масштабировать его… Надо попробовать

Интерполяция: рисуем плавные графики с помощью кривых Безье

У меня просто бред получался. Я брал по умолчанию шаг по X равен 1, а по Y — то, что в исходных данных. Потом считал опорные точки и сохранял их в массив. А потом, когда отрисовывал, все масштабировал. И у меня получался бред. И я не знаю, то ли я втупил, то ли… нельзя так масштабировать. Было бы классно, если бы кто-то обосновать смог это все.

Интерполяция: рисуем плавные графики с помощью кривых Безье

Не совсем то. Через углы я вышел на опорные точки. Посчитал их. Все, дальше за углы я забываю и иду от координат опорных точек. Координаты ОТ (опорных точек, дальше буду сокращать) я сохранил в массиве. Когда идет масштабирование, я пропорционально пытался растянуть и координаты точек графика, и координаты ОТ. И тут у меня что-то не получается… И я вот не знаю где беда — у меня в кривизне рук, или в том, что алгоритм не позволяет. По идее — все должно работать. А на практике… И я вот теряюсь в догадках. С одной стороны — там в рассчетах координат ОТ идут квадраты и корни от координат точек графика. А с другой — по ощущениях, все должно получатся при масштабировании.

Интерполяция: рисуем плавные графики с помощью кривых Безье

А было бы классно, если можно было не пересчитывать)
Но если нет — то нет. Поверю на слово

Интерполяция: рисуем плавные графики с помощью кривых Безье

У меня просто чувство такое, что хоть углы и меняются, но построенные кривые Безье должны просто расстянутся. Там даже если просто в JSFiddle порастягивать график, то видно (если показать еще и опорные точки), что кривые просто расстягиваются, не меняя как-то кривизну или свои изгибы. И мне это не дает покоя. Было бы круто, если бы в веб-е получилось в риал-тайме масштабировать график)
Но руки что-то не позволяют реализовать это. То ли я туплю, то ли алгоритм таки не позволяет стягивать-расстягивать canvas без перерассчета опорных точек…

Интерполяция: рисуем плавные графики с помощью кривых Безье

Надеюсь, что кому-то в вебе пригодится) Мне когда-то в курсаче на третьем курсе универа пригодилось))

Интерполяция: рисуем плавные графики с помощью кривых Безье

Я долго и безрезультатно пытался сделать в коде на JSFiddle так, чтобы можно было один раз запомнить опорные точки, а потом, при масштабировании расстянуть координаты точек графика и координаты опорных точек, и заново провести кривые Безье, не пересчитывая собственно координаты опорных точек. Если у кого-то есть какие-то идеи по этому поводу (а еще лучше — реализации), то я буду очень благодарен. Или если кто-то уверен, что этого сделать не выйдет — тоже напишите. А то товарищ quverty на такую идею классную с масштабированием натолкнул…

Там есть три строчки закомментированные (№№137, 151, 152). Если их раскомментировать, то на canvas-е нарисует еще и опорные точки

Интерполяция: рисуем плавные графики с помощью кривых Безье

Не уверен, что правильно понял плохой случай, но алгоритм не должен поставить опорные точки на вертикальную прямую, если соседние слева и справа точки графика лежат на одной горизонтальной прямой с текущей точкой

Интерполяция: рисуем плавные графики с помощью кривых Безье

Не уверен, но по идее, если сохранять координаты опорных точек (а это львиная доля вычислений в алгоритме), и потом масштабировать и координаты точек графика, и координаты опорных точек, и по ним заново проводить кривые Безье, то все должно работать. Нужно попробовать как-то.
Кривая поменяет форму, но выйдет ли использовать уже посчитаные координаты опорных точек… Было бы здорово.

Интерполяция: рисуем плавные графики с помощью кривых Безье

Там ΔX' идет как длинна стороны треугольника (AC1O), а длинна стороны не может быть отрицательной. Поэтому знак не учитывался. Но замечание корректное и за него спасибо

Интерполяция: рисуем плавные графики с помощью кривых Безье

Корректное замечание. Но там дальше используется и +ΔX', и -ΔX', поэтому этот недочёт нивелируется

Интерполяция: рисуем плавные графики с помощью кривых Безье

Дайте мне точки, при которых кривая загнется, и я удалю статью.

Читайте пункт «К приятному!».

Information

Rating
Does not participate
Registered
Activity