![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Добрый день. Рисую 2 графика функций. Мне нужно найти первые 3 точки их пересечения. У меня возникают мысли только рисовать их синхронно с каким-то шагом, и если где-то расстояние между 2мя точками разных графиков меньше какого-то маленького числа, то обвести то место кружком.
Есть более цивилизованное и простое решение? Может, функция какая-то поможет... И лучше бы координаты этих 2х точек узнать. Последний раз редактировалось digital_sword, 15.12.2008 в 14:07. |
#2
|
|||
|
|||
![]() Ну, можно попробовать сделать это аналитически. Т.е. высчитать координаты, где значения функций равны и, преобразовав их в экранные, обвести эти точки кружочками. Дело в том, что ты же рисуешь графики дискретно и не факт, что при расчете ты получишь пересечение в какой-либо твоей точке. Чем меньше шаг, тем вероятнее его получить, но все равно не факт, что точно попадешь. Хотя, если заранее известно, что такие точки являются целыми по Х, то тогда можно попробовать и по ходу построения графиков их отловить. в противном случае тебе придется вычислять их приближенно, т.е. с некоторой погрешностью.
|
#3
|
|||
|
|||
![]() 2 функции: y=a+b*x*sin(c*x+d) и y=k*x
Сделал так: проверять до тех пор, пока функция1-функция2 не станет равно 0. код: begin x:=0.01; repeat x:=x+0.01; until a+b*x*sin(c*x+d)-k*x<0.001; //приблизительно равно 0 end; что-то запускается, но не работает... не в курсе почему? |
#4
|
|||
|
|||
![]() разность функций надо брать по модулю:
abs(f1 - f2) < eps |
#5
|
|||
|
|||
![]() Я думаю вернее будет
Abs(Round((f1 - f2) * 1e+n)) < Round(eps * 1e+n), где n - степень точности 1, 2, 3 или 4, что соответствует 10, 100, 1000, 10000 |