Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.94/16: Рейтинг темы: голосов - 16, средняя оценка - 4.94
 Аватар для Araneo
650 / 260 / 16
Регистрация: 02.03.2014
Сообщений: 587

Как начертить график, имея последовательность чисел?

25.04.2014, 23:32. Показов 4202. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имею последовательность чисел, хочу график... можно не очень красивый... или даже очень не очень...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.04.2014, 23:32
Ответы с готовыми решениями:

Построить график имея диапазон и матрицу чисел в формуле
Нужно построить график от формулы V, на диапазоне частот, но в этой формуле есть матрица ПСИ, и график не построить не понимаю как...

Как начертить график?
Как начертить график как на рисунке 5.3? Таблицу значений по которым нужно строить я скинул. 8 минута не учитывается, так как во время...

Как начертить подобный график?
Значения величин указал в файле, картинку графика тоже добавил. Значение A0 в обоих случаях равно 11. Подскажите пожалуйста.

30
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38226 / 21158 / 4314
Регистрация: 12.02.2012
Сообщений: 34,773
Записей в блоге: 14
23.11.2014, 13:00
Студворк — интернет-сервис помощи студентам
Какие-то итерации...
0
Модератор
 Аватар для Curry
5171 / 3537 / 536
Регистрация: 01.06.2013
Сообщений: 7,700
Записей в блоге: 9
23.11.2014, 13:08
Куда ж в Хаскеле без итераций. Даю жирную подсказку.
Миниатюры
Как начертить график, имея последовательность чисел?  
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
23.11.2014, 23:51

Не по теме:

А я все балуюсь предложенным конкурсом, есть имхо интересные результаты, пока просто анонсирую, кота и его действие представить еще не готов - кот не причесан и не упакован, и для красивых картинок надо подобрать параметры. В общем, ждите, будет каминг сун :)



Добавлено через 5 часов 11 минут
Ну для начала вот так (можно шрифт не уменьшать):
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
module TruestTypeFont where
 
import Data.List (sort)
import Data.List.Split (chunksOf)
 
beziercurve ps = map (bezierpoint ps) [0,0.001..1] where
    bezierpoint [(r,c)] _ = (round r, round c)
    bezierpoint ps t = bezierpoint ps' t where
        ps' = zipWith (\(r1,c1) (r2,c2) -> (r1+(r2-r1)*t, c1+(c2-c1)*t)) ps $ tail ps
 
polygon ps = concat.map beziercurve.zipWith (\x y->x++take 1 y) ps $ tail ps++[head ps]
 
surround ps = sort $ surround' (r0-1,c0+1) 3 [] where
    (r0,c0) = minimum ps
    surround' p d a = if p == (r0-1,c0) then a else
        let p' = (\(a,b) (c,d) -> (a+c,b+d)) p $ [(0,1),(-1,0),(0,-1),(1,0)]!!(mod d 4)
        in case elem p' ps of
        True -> surround' p  (d+1 `mod` 4) (if mod d 2 == 0 then (p':a) else a)
        _    -> surround' p' (d-1 `mod` 4) a
 
fill ((r1,c1):(r2,c2):ps) = map (\c -> (r1,c)) [c1..c2] ++ fill ps
fill _ = []
 
formtext glifs rows cols text = unlines.chunksOf cols $ ft text 0 where
    lfill = map (fill.surround.polygon) glifs
    pcount p = sum.map (fromEnum.elem p)
    ft tt@(t:ts) i = if i==(rows*cols) then [] else
        if pcount (div i cols, mod i cols) lfill `mod` 2 == 0
        then (' ':ft tt (i+1)) else (t:ft ts (i+1))
 
main = do
    let eye = [[(9,8),(7,9),(4,13),(7,17)],[(9,18),(11,17),(14,13),(11,9)]]
        gl = [[[(12,1),(2,2),(-3,22),(2,42)],[(12,43),(22,42),(27,22),(22,2)]],
                 eye, map (map (\(r,c)->(r,c+18))) eye,
                 [[(15,7),(21,22)],[(15,37),(25,22)]]]
    putStr $ formtext gl 25 45 $ cycle ['a'..'z']
Добавлено через 26 минут
А можно уменьшить шрифт до 4-ки и добавить вниз приведенного кода следующую пару строк:
Haskell
1
2
    let gl1 = map (map (map (\(r,c)->(r*5,c*5)))) gl
    putStr $ formtext gl1 (25*5) (45*5) $ cycle "Any_maybe_long_text:)"
Правда, глаза не очень круглые получились - надо было не выпендриваться с Безьями 4 порядка, а лучше сделать больше сегментов 2 порядка

Добавлено через 48 минут
ЗЫ желающие дать примеры контуров, состоящих из прямых и кривых Безье любого порядка, могут написать здесь координаты их узловых и опорных точек, попробую построить залитые области. Можно хоть звезду давать не по внешнему контуру, а со множеством внутренних самопересечений - зальет отлично, я даже немного горд алгоритмом заливки. Да, координаты желательно от 0 до 500 по горизонтали и от 0 до 250 по вертикали (узловые точки, опорные могут вылезать за пределы этой области), иначе при самом маленьком шрифте в экран не влезет И замкнутых полигонов можно любое количество дать - зальет их объединение с учетом инверсии.
2
24.11.2014, 01:21

Не по теме:

Ёлку хочу! Ёлку! Новый год же скоро. "Какой же Новый год, да без ёлочки?" (с) Наверняка, на безъях её соорудить можно.

0
24.11.2014, 01:31

Не по теме:

Да как нефиг делать - и треугольниками, и с загибонами :) И даже с игрушками и со снеговиком рядом :) Если дадите Безью - запихну в код куда надо. Или сам при случае попробую подобрать...

0
Модератор
 Аватар для Curry
5171 / 3537 / 536
Регистрация: 01.06.2013
Сообщений: 7,700
Записей в блоге: 9
24.11.2014, 13:21

Не по теме:

С безъями у меня туго. В смысле, софта не знаю которым удобно эти безъи делать и координаты получать. Да и художник из меня ....
А снеговик, эт'хорошо! И ещё зайсы! :)



Добавлено через 24 минуты

Не по теме:

А ель, наверно, полуавтоматом сгенерить можно. Одну лапу задать (верхнюю), а остальные побольше и со сдвигом, так что сразу верхняя точка верхней стороны лапы должна быть по центру ели, а нижней стороны в сторону. (Ну, вот так я объясняю :scratch: )



Добавлено через 10 часов 54 минуты
Раскрываю тайну "красных загогулин" (поскольку не сильно кто заинтересовался, каждый своего кота гладит).
В общем, понадобился мне поиск локального экстремума двухмерной ф-ии. Можно было и сишную библиотеку прикрутить, но ... Ниже несколько приукрашенный отладочный вариант с трассировкой оптимизации.
Прилагаю для посмотреть не сколько на метод деформируемого треугольника, сколько на простоту (с моей т.з.) построения графиков.
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
{-# LANGUAGE MultiWayIf #-}
module NelderMead where
-- Метод Нелдера — Мида, также известный как метод деформируемого многогранника
 
import Data.List
 
type Coord = (Double,Double)
type Triangle = (Coord,Coord,Coord)
 
center2:: Coord -> Coord -> Coord
center2 (x1,y1) (x2,y2) = ((x1+x2)/2,(y1+y2)/2)
 
triangleCenter:: Triangle -> Coord
triangleCenter ((x1,y1),(x2,y2),(x3,y3)) = ((x1+x2+x3)/3,(y1+y2+y3)/3)
 
reflection:: Coord -> Coord -> Coord
reflection (x1,y1) (x2,y2) = ( 2*x2-x1, 2*y2-y1 )
 
disp:: Double -> Double -> Double -> Double
disp f1 f2 f3 = max (max f1 f2) f3 - min (min f1 f2) f3
 
-- Двухмерная минимизация ф-ии методом Нелдера — Мида с трассировкой строящихся треугольников
traceNelderMead:: (Double -> Double -> Double) -- ф-ия у которой ищется локальный минимум  
                  -> Double  -- разброс значений в треугольнике (критерий останова)
                  -> Triangle -- исходный треугольник 
                  -> [Triangle] -- трассировка поиска минимума. Последний треугольник - результат
traceNelderMead f lim cc@(c1,c2,c3) = cc: go (fu c1) c1 (fu c2) c2 (fu c3) c3
    where   fu = uncurry f
            go f1 t1 f2 t2 f3 t3
                | lim > disp f1 f2 f3 = []
                | otherwise = 
                    let [(fl,l),(fg,g),(fh,h)]=sort [(f1,t1),(f2,t2),(f3,t3)]
                        c = center2 l g
                        r = reflection h c
                        fr = fu r  in
                    if  | fr < fl ->
                             let e = reflection c r
                                 fe = fu e  in
                             if fe < fr 
                                then (l,g,e): go fl l fg g fe e  
                                else (l,g,r): go fl l fg g fr r
                        | fr < fg -> (l,g,r): go fl l fg g fr r
                        | fr < fh ->          sh fl l fg g fr r c
                        | otherwise ->        sh fl l fg g fh h c 
            sh fl l fg g fh h c =
                let s = center2 h c
                    fs = fu s in
                if fs < fh 
                    then (l,g,s): go fl l fg g fs s
                    else let g' = center2 l g
                             h' = center2 l h
                         in (l,g',h'): go fl l (fu g') g' (fu h') h'
                
-- функция Розенброка в качестве тестовой
rosenbrock:: Double -> Double -> Double
rosenbrock x y = (1-x)^2+100*(y-x^2)^2
 
-- Вспомогательные ф-ии для создания данных на JS
showCJ (x,y) = '[': show x ++ "," ++ show y ++ "]"
 
showTJ (c1,c2,c3) = showCJ c1 ++ "," ++ showCJ c2 ++ "," ++ showCJ c3 ++ "," ++ showCJ c1 
 
triangleMinMax ((x1,y1),(x2,y2),(x3,y3)) = (min (min x1 x2) x3, max (max x1 x2) x3, 
                                            min (min y1 y2) y3, max (max y1 y2) y3)
 
mkTriangleJ (x:xs) = go xs (showTJ x) (triangleMinMax x)
   where go []     s mm = (s,mm)
         go (t:ts) s (xl,xh,yl,yh) = let (xl',xh',yl',yh')=triangleMinMax t in
                                     go ts (s++",[null,null],\n"++ showTJ t) 
                                           (min xl xl', max xh xh', min yl yl', max yh yh')
 
main = writeFile "test.html" $ htmlHead ++ 
        let t = traceNelderMead rosenbrock  0.0001 ( (2, -1), (2.5, 1), (2, -0.5) ) 
                                                    -- ( (-0.5, 0.3), (-0.7, 0.5), (-0.8, 0.2) ) 
            steps = length t
            c = triangleCenter $ last t 
            fc = uncurry rosenbrock c
            (s,(xl,xh,yl,yh)) = mkTriangleJ t  
        in  s ++ htmlAfterTable ++ show c ++ "=" ++ show fc ++ "  , steps=" ++ show steps ++ htmlX ++ 
            show (floor xl) ++ ", maxValue: " ++ show (ceiling xh) ++ htmlY ++
            show (floor yl)  ++ ", maxValue: " ++ show (ceiling yh) ++ htmlEnd
 
htmlHead ="<html><head><script type='text/javascript' src='https://www.google.com/jsapi'></script> \n\
 \ <script type='text/javascript'> \n\
 \     google.load('visualization', '1', {packages:['corechart']}); \n\
 \     google.setOnLoadCallback(function(){ \n\
 \       var data = google.visualization.arrayToDataTable([ ['X', 'Y'], \n"
 
htmlAfterTable ="]);\n\n\
 \        var options = { \n\
 \             title: 'Minimum: f"
 
htmlX = "',\n\
 \             hAxis: { title: 'X', minValue: "
 
htmlY="}, \n\
 \             vAxis: { title: 'Y', minValue: "
 
htmlEnd ="},\n          legend: 'none', lineWidth: 1, colors:['red'], pointSize : 0  \n\
 \        }; \
 \     var chart = new google.visualization.ScatterChart(document.getElementById('chart_div'));  \n\
 \        chart.draw(data, options);  \n\
 \    });  \n\
 \   </script></head><body><div id='chart_div' style='width: 900px; height: 500px;'></div></body></html>  \n"
2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38226 / 21158 / 4314
Регистрация: 12.02.2012
Сообщений: 34,773
Записей в блоге: 14
24.11.2014, 13:51
KolodeznyDiver, да. Это очень хорошая идея.
0
24.11.2014, 22:25

Не по теме:

KolodeznyDiver, я посмотрел на ваш код несколько раз, конечно ничего не понял, но это и неудивительно. Я и не искал описание алгоритма Нелдера — Мида, и тем более не понимаю, как метод нахождения функции 2 переменных может помочь в построении графика. Во всем надо разбираться и на все нужно время. Причем, мне гораздо проще разобраться с описанием алгоритма на словах, чем с реализацией его в коде. Если вам будет интересно, могу предложить вам в некотором смысле обмен - я расскажу идею и алгоритм своего вышепредставленного кода, а вы своего. Может и другим читателям тоже будет интересно.

ЗЫ но спасибо однозначно поставлю за код, вне зависимости от моего предложения.

0
Модератор
 Аватар для Curry
5171 / 3537 / 536
Регистрация: 01.06.2013
Сообщений: 7,700
Записей в блоге: 9
24.11.2014, 23:16
__Ivana, алгоритм Нелдера — Мида не строит график, это метод нахождения локального экстремума ф-ии нескольких переменных. См. на "Нелдера — Мида" в википедии.
Для ф-ии двух переменных задаётся начальные три точки (треугольник) в плоскости аргументов исследуемой функции. Далее, в методе, на каждом шаге одна или две точки треугольника заменяются (чаще одна) пока треугольник не "приходит" в экстремум. В ф-ии traceNelderMead, в целях отладки, я вывел все треугольники, на всех шагах итерации в список, который возвращает функция.

А для построение графика (в данном случае из этих треугольников, а вообще любого) я использовал гугловский сервис построения графиков https://developers.google.com/chart/ и предлагаю метод визуализации выходных данных в виде графиков на Хаскелле. Для этого нужно генерировать html - файл в котором на JavaScript вызывается гугловская библиотека отрисовки графиков (с интерактивными возможностями и прочими фенечками), туда же записываются данные в виде двухмерного массива JavaScript (что несложно, они как списки в Хаскеле). В общем, программно генерируем файл html используя как заготовку один из примеров с сайта гугла.
Если кто не знает js, может это вызовет какие то трудности. Ну, вот вам, практически только создание html странички с графиком
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
module GooglePlotEx1 where
 
main = googlePlot "SimpleSinPlot.html" $ map (\x -> (x,sin(x))) [0.1,0.2 .. 10]
 
googlePlot:: String -> [(Double,Double)] -> IO () 
googlePlot filename dat = writeFile filename $ htmlHead ++ (showData dat) ++ htmlEnd 
    where showData [] = []
          showData (x:xs) = (shw x) ++ go xs
          go [] = []
          go (x:xs) = ",\n" ++ (shw x) ++ go xs
          shw (x,y) = '[':show x ++ "," ++ show y ++ "]"
 
htmlHead ="<html><head><script type='text/javascript' src='https://www.google.com/jsapi'></script> \n\
 \ <script type='text/javascript'> \n\
 \     google.load('visualization', '1', {packages:['corechart']}); \n\
 \     google.setOnLoadCallback(function(){ \n\
 \       var data = google.visualization.arrayToDataTable([ ['X', 'Y'], \n"
 
htmlEnd ="]);\n\n\
 \        var options = { \n\
 \             title: 'Simple plot of sin(x)',\n\
 \             hAxis: { title: 'X'}, \n\
 \             vAxis: { title: 'Y'},\n\
 \             legend: 'none', lineWidth: 1, colors:['blue'], pointSize : 0  \n\
 \        }; \
 \     var chart = new google.visualization.ScatterChart(document.getElementById('chart_div'));  \n\
 \        chart.draw(data, options);  \n\
 \    });  \n\
 \   </script></head><body><div id='chart_div' style='width: 900px; height: 500px;'></div></body></html>  \n"
1
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
24.11.2014, 23:39
То есть, вы выводите в виде графика все промежуточные треугольники - итерации алгоритма? Чтобы видеть процесс его схождения? А программа только создает текстовый (html) файл, куда в определенном формате помещаются данные, которые может визуализировать некий сервис гугла? Причем, визуализирует точки не точками а сразу лайнами?
И да, по моему коду вам интересны пояснения или вам там все и так понятно?
0
24.11.2014, 23:50

Не по теме:

__Ivana, да сервис гугла для рисования графиков рисует графики по точкам. Даже трёхмерные может. Если Вам жалко сервера гугла (вдруг перегрузятся) или планируете смотреть офф-лайн, библиотеку по рисованию графиков (на JavaScript) можете себе скачать и подправить на странице ссылку. Как - на сайте гугла подробные руководства.

Когда мне понадобится работать с кривыми Безье, я к Вам обращусь за консультацией. А то сейчас всё равно забуду.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.11.2014, 23:50

Как начертить график в экселе?
как начертить такой график, что бы при вводе данных он изменялся?

Как начертить двухмерный график отношения 6*b+a>(2*a-((a*b)/2))^2 ?
Собственно, сабж. Дайте, пожалуйста, доходчивую инструкцию по возможности, так как я крайне плохо разбираюсь в этой программе. Буду очень...

как выглядит, как начертить график функции плотности распределения случайной величины f(x,y)=x+y ?
как выглядит, как начертить график функции плотности распределения случайной величины f(x,y)=x+y ??

Как начертить график на form3? по данным stringgrid, который находится на form2?
unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,...

Начертить график!
Нужна сделать рисунки к этим задачкам. я не понимаю что рисовать . помогите!!! на 1 листе задания на другом решение с ответом. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru