![]() |
|
Модераторы: Aliance, skyboy, MoLeX, ksnk |
![]()
|
|
| Muerto |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: нет Всего: 4 |
Хотел бы создать некий класс который бы рисовал мне функции...
К примеру даю ему y=3x^2+2x+345 И он мне рисует... размер листа 1000 на 1000... Все вроде бы просто... в любую функцию подставляем X получаем Y и рисуем.... Но блин... лист то у нас начинается с 0,0 и до 1000,1000... Как так можно рисовать то? Я сделал середину 500,500 которая на самом деле симфолезирует x,y И просчитал какая же у нас функция нарисуется у которой низ в 500,500 ... Я пришел к выводу что смогу нарисовать функцию у которой точки 0,0 500,-500 1000,0 Ну эт парабола Считал считал на бумаге... вышло y=x^2-2x
Нарисовать такое простым циклом не возможно... пришлось делать
Но не серьёзно ведь так работать... Может у кого получше идеи будут... Цель - методом get дают функцию, и комп её рисует... Вот парабола которую я указал выше, так как мой скрипт её нарисовал: ![]() Это сообщение отредактировал(а) Muerto - 9.9.2010, 13:25 |
||||
|
|||||
| Muerto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: нет Всего: 4 |
Мне нужно как бы что бы было так:
Реал(x,y) => на картинке(x,y) (0,0) => (500,500) (-500,500) => (0,0) (-500,-500) => (0,1000) (500,-500) => (1000,1000) (500,500) => (1000,0) Но где же тут закономерность??? чет не вижу (-255,255) => (255,255) (-255,-255) => (255,750) (255,-255) => (750,750) (255,255) => (750,255) Это сообщение отредактировал(а) Muerto - 9.9.2010, 13:57 |
|||
|
||||
| Dastan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 9.9.2010 Репутация: 1 Всего: 5 |
Это сообщение отредактировал(а) Dastan - 9.9.2010, 13:53 |
|||
|
||||
| Muerto |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: нет Всего: 4 |
Супер!!! Вот только как вы это просчитали ? |
||||
|
|||||
| Dastan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 9.9.2010 Репутация: 1 Всего: 5 |
||||
|
||||
| Muerto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: нет Всего: 4 |
Рисует все отлично теперь когда точно расчитываю мой фальшивый X и Y!
Мне бы хотелось что бы такая аппликация была доступна как бы студентам... Что бы человек ввел к примеру pattern=3*x^2+2x+3 И нарисовало функцию... '3*x^2+2*x+3' На пхп выглядит вот так: $y=3*pow($x,2)+2*$x+3; Сейчас вот играюсь... пока пытаюсь через exlode('x' что то сотворить... Уже вижу что сверху "+" не передается как следует МОжет тупо взять выбор наставить... типа формы? размер таблицы... и дальше паттерны... вот только я туда все не запихаю полюбому Это сообщение отредактировал(а) Muerto - 9.9.2010, 16:29 |
|||
|
||||
| Dastan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 9.9.2010 Репутация: 1 Всего: 5 |
3*x^2+2x+3 |
|||
|
||||
| Muerto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: нет Всего: 4 |
Dastan, А технологию не подскажите? засчет чего у них пере конвертировалось в 3*x^2%2B2x%2B3 ?
htaccess какой то? Это сообщение отредактировал(а) Muerto - 9.9.2010, 16:44 |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 2 Всего: 386 |
Muerto, вероятно, нужно автоматически считать границы графика.
К примеру, нужно вывести график по X от -100 до +100. Можно верить в то, что график гладкий и не особенно дергается и просчитать набор точек по X с шагом 10. получится ~20 значений. Из них выбрать минимальные и максимальные значения Y и по ним уже посчитать нужную высоту получившейся картинки. Если высота сразу зашкаливает за габариты Y, можно уменьшить габариты X и так далее... Так можно выводить картинку меньшего размера - экономить трафик юзера. Можно вспомнить начала матанализа и приближенно. численными методами посчитать "точки перегиба" функции, чтобы более надежно определить экстремальные значения графика. Так, например график из первого поста "сдвинется" вниз и ненужная пустая сетка не будет выводится. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Muerto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: нет Всего: 4 |
Я ща выложу то что есть, и сразу ясно станет чего ещё не хватает
http://learn-php.ru/graph.php?h=1000&w...rn=3*x^2+2*x+30 То что после patter я просто так вставил... на данный момент он рисует эту функцию потому что я вбил $y=3*pow($x,2)+2*$x+30; Осталось придумать как пере-конвертировать 3*x^2+2*x+30 в 3*pow($x,2)+2*$x+30 Есть функции вроде eval к примеру... через которую если закинуть 'return 3*pow($x,2)+2*$x+30' То думаю будет то что надо... но так ли это стоит решать? здесь ещё вопрос безопасности оч серьёзный есть... Это сообщение отредактировал(а) Muerto - 9.9.2010, 16:51 |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 2 Всего: 386 |
urlencode нужно применять. символ + в адресной строке имеет сакральный смысл. Он в некоторых случаях, в стародавние времена, использовался как заменитель пробела, по этому с ним обращаются странно... -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Dastan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 9.9.2010 Репутация: 1 Всего: 5 |
||||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 2 Всего: 386 |
простые функции, как эта - конвертировать просто. Достаточно ч заменить на $x и a^b заменить на pow(a,b) а вот сложные, со скобками и разной странной математикой - уже сложнее. Нужно будет разбирать уравнение в обратную польскую форму, потом по этой форме склеивать php-выражение. Да и защита от злонамеренного хака сервера с помощью графикопостроителя совсем не помешает ;) с выражением лучше делать create_function, вместо eval'а -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Muerto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: нет Всего: 4 |
Ага... сейчас налеплю то что надо...
Я немного подумал, и пришел к выводу что нужно использовать не $_GET['pattern'] на $_SERVER['REQUEST_URI']/$_SERVER['QUERY_STRING'] В таком случае плюсы не съедает, и можно получать граф, прямо через get method... Это сообщение отредактировал(а) Muerto - 9.9.2010, 17:40 |
|||
|
||||
| Muerto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: нет Всего: 4 |
Это с точки зрения безопасности? Или так эффективней в плане, что я делаю выражение для $newfunc = create_function('$x', 'return sin($x)'); Это сообщение отредактировал(а) Muerto - 9.9.2010, 17:55 |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Графика | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |