SERGE_BLIZNUK
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору CPPASCAL ну, рад, что Вы хоть не опускаете руки и пытаетесь сами решить проблему. Тогда пара очевидных, примитивных вещей - я думаю, что Вы и сами это понимаете, просто для "галочки"... для того, чтобы график начинался с самой первой точки по горизонтали и заканчивался последней, нужно чтовы в функции PutPixel( x, y,...) x принимало значения от 0 до GetMaxX (для этого нужно предоставленный диапазон разложить нужным образом. например, если x функции изменяется от -5 до 10 то нужно при выводе к X прибавлять 5 (тогда при X = - 5 получится как раз 0. дальше, насколько изменять X? значений X всего 15 (x2 - x1 = 10 - (-5) = 15) а у нас точек GetMAxX всего на экране, делим одно на другое: dx := (x2-x1)/GetMaxX; потом цикл вида: x:=-5; while x<=10 do begin PutPixel( (x+5)/dx, F(X)*ScaleY,....) x := x + dx; end; тоже самое надо сделать и по Y - найти минимальное и максимальное значение Y в диапазоне X в [-5;10] и пересчитать ScaleY Теперь вопрос - а если нужно вывести одновременно графики двух функций... тут два способа: найти минимальную и максимальную области X и пересчитать коэффицент и смешение и минимум/максимум ПО ДВУМ функциям. Но тогда может получится, что для одной из фунций график займёт весь экран, а второй функции вообще не будет видно (ну, скажем, например, график y:=x*0.00001) тогда второй способ - вывели первый график. а потом, на этих же осях - выводим второй - но коэффиценты масштабные пересчитваем для него свои (по его минимуму/максимуму). Это будет неправильно с точки зрения математики, зато красиво. удачи! |