|
|
|
| Господа программисты, подскажите пожалуйста как можно сгладить примерно такой график, т.е. нарисовать через точки кривую Безье.
Даны только координаты красных точек. | |
|
|
|
|
|
|
|
для: Евгений Петров
(31.10.2005 в 18:56)
| | Где дело происходит в PHP? или другой среде? | |
|
|
|
|
|
|
|
для: cheops
(31.10.2005 в 19:41)
| | В нем самом. :) | |
|
|
|
|
|
|
|
для: Евгений Петров
(31.10.2005 в 19:44)
| | Плохо :))) Везде имеются готовые функции, в PHP такого не встречал - тогда необходимо пользоваться исходными уравнениями
x(t) = (1—t)3x0 + 3t(1—t)2x1 + 3t2(1—t)x2 +t3x3
y(t) = (1—t)3y0 + 3t(1—t)2y1 + 3t2(1—t)y2 +t3y3
|
| |
|
|
|
|
|
|
|
для: cheops
(01.11.2005 в 13:06)
| | И что здесь где есть что? :)))
Ну вот например точки:
+---+---+---+---+---+
| X | 1 | 3 | 7 | 4 |
+---+---+---+---+---+
| Y | 5 | 0 | 3 | 4 |
+---+---+---+---+---+
|
Как ки ним применить эту формулу? | |
|
|
|
|
|
|
|
для: Евгений Петров
(01.11.2005 в 19:31)
| | Пиведённые выше формулы для параметра t = [0, 1]. А x0, x1, x2, x3 и y0, y1, y2, y3 определяются по схеме
+---+---+---+---+---+
| N | 0 | 1 | 2 | 3 |
+---+---+---+---+---+
| X | 1 | 3 | 7 | 4 |
+---+---+---+---+---+
| Y | 5 | 0 | 3 | 4 |
+---+---+---+---+---+
|
Поэтому если вам нужно 100 точек делите отрезок [0,1] на 100 частей и подставляйте вместо t - должна получится кривая Безье. | |
|
|
|
|
|
|
|
для: cheops
(02.11.2005 в 00:51)
| | Спасибо, буду разбираться. | |
|
|
|
|
|
|
|
для: Евгений Петров
(02.11.2005 в 02:12)
| | Cheops снова обращаюсь к вам за помощью. Дошел наконец то до рисования кривой, только не очень понял что за отрезок [0,1] ? :) Заранее огромное спасибо. | |
|
|
|
|
|
|
|
для: Евгений Петров
(12.11.2005 в 19:45)
| | Это параметрические уравнения... хотя нет их никто не любит, а тут всё просто до безобразия: у нас имеется 4 точки, необходимо по ним построить кривую Безье из 10 точек. Для этого берём отрезок [0,1] и делим его на десять частей, т.е. вместо t в уравление подставляем
t = 0.0
t = 0.1
t = 0.2
...
t = 0.9
t = 1.0
|
Подставляем эти десять t в приведённые выше уравнения - получается 10 точек (x,y). Захотелось увеличить точность и вычислить не 10, а 100 точек - делем отрезок [0,1] на 100 частей
t = 0.00
t = 0.01
t = 0.02
...
t = 0.98
t = 0.99
t = 1.00
|
подставляем t в уравнения - получаем 100 точек. | |
|
|
|
|
|
|
|
для: cheops
(12.11.2005 в 23:15)
| | Ага, спасибо, а че кривую только через 4 точки провести можно? :))) | |
|
|
|
|
|
|
|
для: Евгений Петров
(13.11.2005 в 00:30)
| | В общем нет... /*пытаясь наморщить остатки мат.аппарата*/ там достаточно много методов, можно и через три, можно сплайнами... Но Безье требует 4. | |
|
|
|
|
|
|
|
для: cheops
(13.11.2005 в 13:53)
| | А какими др. способами можно сгладить график? И как? :) Заранее огромное спасибо | |
|
|
|
|
|
|
|
для: Евгений Петров
(13.11.2005 в 17:55)
| | Я сплайнами пользуюсь... правда на PHP у меня таких задач не возникало, если хотите могу порыться в поисках C-функции... | |
|
|
|
|
|
|
|
для: cheops
(13.11.2005 в 23:22)
| | Да нет, спасибо, я лучше в yandex поищу. :) | |
|
|
|
|
|
|
|
для: cheops
(13.11.2005 в 23:22)
| | >Я сплайнами пользуюсь... правда на PHP у меня таких задач не
>возникало, если хотите могу порыться в поисках C-функции...
А вот я бы не отказался :) . Мне очень интересны реализации сглаживания кривых на С. | |
|
|
|
|
|
|
|
для: mannnz
(14.11.2005 в 01:36)
| | Напомните вечером, если забуду - я в принципе нашёл подходящий алгоритм, но он в класс встроен - его от туда выкусить необходимо. | |
|
|
|
|
|
|
|
для: cheops
(14.11.2005 в 14:56)
| | А сглаживание на php можете привести!?! | |
|
|
|
|
|
|
|
для: cernos
(14.11.2005 в 15:26)
| | ---- | |
|
|
|