Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 11

График X-Y в PictureBox

22.08.2013, 14:45. Показов 1521. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Попытаюсь объяснить понятнее, что у меня происходит.
Имеется два массива X(kol,kol) и Y(kol). X - это дата и время, Y-числа формата Double. Рисую в PictureBox двумерный график X от Y:

Visual Basic
1
2
3
4
5
6
7
8
Xmin = CDbl(X(1,1)) + CDbl(X(1,2))
         Xmax = CDbl(X(kol,1)) + CDbl(X(kol,2))
         Ymin = Pmax * 1.2
         Ymax = Pmin / 1.2
         Picture4.Scale (Xmin, Ymin)-(Xmax, Y2max)
         For i = 1 To kol
             Picture4.Circle (CDbl(X(i,1)) + CDbl(X(i,2)), Y(i)), Picture4.ScaleWidth / 200
         Next i
Даты и время перевожу в числовое значение. Разница между точками 1 минута. На графике же у меня получается, что на одном времени по несколько точек сидит. Не знаю понятно объяснил или нет? Т.е. Сначала 6 точек с одинаковым значением X располагаются друг над другом (т.е. по оси Y значения разные , все норм), потом еще несколько точек друг над другом и т.д. Количество точек с одинаковым X по разному от 4-х до 6-и. Шаг между одними точками с одинаковым X и другими примерно 0.004 в числовом формате.
Я проверял CDbl(X(i,1)) + CDbl(X(i,2)), у каждой точки разное число (отличие в 3-ем знако после запятой), а на графике по несколько точек располагаются друг над другом с одинаковым X.
Как с этим бороться? Не понимаю где может быть ошибка.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.08.2013, 14:45
Ответы с готовыми решениями:

График в PictureBox
у меня появилась такая проблема, делаю программу которая будет строить график на основе данных из файла.... но суть в том, что я хочу...

График в PictureBox
Всем привет! Вот я построил график функции, но ее значения очень велики, потому я б хотел ограничить отображения графика по оси Y в...

График в PictureBox
Ситуация такая : в цикле с шагом 1e-4 на интервале вычисляются значения функции f(x). Нужно построить ее график в PictureBox. То есть...

10
 Аватар для Апострофф
9908 / 3924 / 742
Регистрация: 11.10.2011
Сообщений: 5,907
22.08.2013, 15:04
Цитата Сообщение от KPEATOP Посмотреть сообщение
Picture4.Scale (Xmin, Ymin)-(Xmax, Y2max)
Оно?
0
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 11
22.08.2013, 15:23  [ТС]
это опечатка. По Y у меня все норм, у меня по X по несколько одинаковых значений получается на графике, хотя везде шаг 1 минута. Выложу скриншот, чтоб понятнее было
Миниатюры
График X-Y в PictureBox  
0
 Аватар для Апострофф
9908 / 3924 / 742
Регистрация: 11.10.2011
Сообщений: 5,907
22.08.2013, 15:58
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
         Xmin = CDbl(X(1,1)) + CDbl(X(1,2))
         Xmax = CDbl(X(kol,1)) + CDbl(X(kol,2))
         Ymin = Pmax * 1.2
         Ymax = Pmin / 1.2
 
         debug.print Xmin,Xmax 'покажите, что выдано в окне Immediate [Ctrl+G]
 
         Picture4.Scale (Xmin, Ymin)-(Xmax, Ymax)
         For i = 1 To kol
             Picture4.Circle (CDbl(X(i,1)) + CDbl(X(i,2)), Y(i)), Picture4.ScaleWidth / 200
         Next i
Есть подозрение, что числа эти довольно велики и точность Single не позволяет отобразить каждые 0,004

Добавлено через 14 минут
Может быть так получится - замените первые две строки:
Visual Basic
1
2
         Xmin =  CDbl(X(1,2))
         Xmax = CDbl(X(kol,1))-CDbl(X(1,1)) + CDbl(X(kol,2))
0
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 11
22.08.2013, 16:10  [ТС]
при печати debug.print Xmin,Xmax выдает:

41001,5840625 41036,5347569444

Добавлено через 1 минуту
Цитата Сообщение от Апострофф Посмотреть сообщение
Может быть так получится - замените первые две строки:Код Visual Basic
1
2
Xmin = CDbl(X(1,2))
Xmax = CDbl(X(kol,1))-CDbl(X(1,1)) + CDbl(X(kol,2))
Если я так сделаю, то не увижу на графике последнюю точку X(kol,1)+X(kol,2)
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38195 / 21128 / 4309
Регистрация: 12.02.2012
Сообщений: 34,733
Записей в блоге: 14
22.08.2013, 17:13
Цитата Сообщение от KPEATOP Посмотреть сообщение
Разница между точками 1 минута
- если по оси OX откладываются даты (в полном формате - с минутами и секундами), то давай посчитаем: какое расстояние между двумя датами, и сколько минут в сутках (1440). Делим расстояние между датами на 1440, и убеждаемся, что если разница измеряется минутами, то точки действительно попадут в одну дату...
0
 Аватар для Апострофф
9908 / 3924 / 742
Регистрация: 11.10.2011
Сообщений: 5,907
22.08.2013, 21:18
Цитата Сообщение от KPEATOP Посмотреть сообщение
Если я так сделаю, то не увижу на графике последнюю точку X(kol,1)+X(kol,2)
А если так?
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
         'Xmin = CDbl(X(1,1)) + CDbl(X(1,2))
         'Xmax = CDbl(X(kol,1)) + CDbl(X(kol,2))
         Xmin =  CDbl(X(1,2))
         Xmax = CDbl(X(kol,1))-CDbl(X(1,1)) + CDbl(X(kol,2))
         Ymin = Pmax * 1.2
         Ymax = Pmin / 1.2
         dX=(xmax-xmin)/16
         Picture4.Scale (Xmin-dx, Ymin)-(Xmax+dx, Ymax)
         For i = 1 To kol
             'Picture4.Circle (CDbl(X(i,1)) + CDbl(X(i,2)), Y(i)), Picture4.ScaleWidth / 200
             Picture4.Circle (CDbl(X(i,1)) + CDbl(X(i,2))-CDbl(X(1,1)), Y(i)), Picture4.ScaleWidth / 200
         Next i
0
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 11
23.08.2013, 09:21  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
- если по оси OX откладываются даты (в полном формате - с минутами и секундами), то давай посчитаем: какое расстояние между двумя датами, и сколько минут в сутках (1440). Делим расстояние между датами на 1440, и убеждаемся, что если разница измеряется минутами, то точки действительно попадут в одну дату...
Не понял, почему точки должны попасть в одну дату. Разница между ними 1 минута, делим на 1440 = 0.0006944444
При переводе даты в число значение получается число, измеряемое в сутках. Попробовал распечатать первые 10 значений двумя способами Debug.Print CSng(DDKID(i)) + CSng(VDKID(i)), CDbl(DDKID(i)) + CDbl(VDKID(i)) м вот что получается:

41001,59 41001,5840625
41001,59 41001,5847569444
41001,59 41001,5854513889
41001,59 41001,5861458333
41001,59 41001,5868402778
41001,59 41001,5875347222
41001,59 41001,5882291667
41001,59 41001,5889236111
41001,59 41001,5896180556
41001,59 41001,5903125

Теперь смотрю в справке и вижу:
Syntax

object.Circle [Step] (x, y), radius, [color, start, end, aspect]

(x, y) Required. Single values

Если x,y - Single значит даже если я и буду делать CDbl(DDKID(i)) + CDbl(VDKID(i)), то у меня на графике все равно будет только 2 цифры после запятой?
0
 Аватар для Апострофф
9908 / 3924 / 742
Регистрация: 11.10.2011
Сообщений: 5,907
23.08.2013, 09:30
KPEATOP, вам именно это и пытаюсь объяснить второй день.
Вычитайте начальную дату из Scale по X и при выводе.
Тогда точности Single должно хватить.
0
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 11
23.08.2013, 10:09  [ТС]
Цитата Сообщение от Апострофф Посмотреть сообщение
KPEATOP, вам именно это и пытаюсь объяснить второй день.
Вычитайте начальную дату из Scale по X и при выводе.
Тогда точности Single должно хватить.
Извини, сначала не понял ход ваших мыслей, щас попробую

Добавлено через 27 минут
))) с вычетанием первой даты получилось. Визуально на графике все правильно, только если мне нужно из графика что нибудь вытащить какой нибудь кусок, я должен прибавлять начальную дату. Ну это нормально. Только я все равно ничего не понял почему так получается)))

Добавлено через 7 минут
Кстаи, dX не обязательно. У меня и без dX получилось
0
 Аватар для Апострофф
9908 / 3924 / 742
Регистрация: 11.10.2011
Сообщений: 5,907
23.08.2013, 10:18
Цитата Сообщение от KPEATOP Посмотреть сообщение
Только я все равно ничего не понял почему так получается)))
Single Data Type

Single (single-precision floating-point) variables are stored as IEEE 32-bit (4-byte) floating-point numbers,
ranging in value from -3.402823E38 to -1.401298E-45 for negative values
and from 1.401298E-45 to 3.402823E38 for positive values.
The type-declaration character for Single is the exclamation point (!).
Обратите внимание на к-во значащих цифр в числе!
Цитата Сообщение от KPEATOP Посмотреть сообщение
41001,59 41001,5840625
------------
41001,59 41001,5903125
Именно поэтому чем больше значащих цифр в целой части числа,
тем меньше их в дробной.

Добавлено через 2 минуты
Цитата Сообщение от KPEATOP Посмотреть сообщение
Кстаи, dX не обязательно. У меня и без dX получилось
Цитата Сообщение от KPEATOP Посмотреть сообщение
Если я так сделаю, то не увижу на графике последнюю точку X(kol,1)+X(kol,2)
Подстраховался, ведь и по Y вы с запасом массштаб сделали
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.08.2013, 10:18
Помогаю со студенческими работами здесь

График функции в Picturebox
Как прописать код так, чтобы при нажатии кнопки нарисовать график функции в picturebox. Я прописал только для прорисовки в chart void...

PictureBox: Биржевой график
уважаемые программисты, очень нужен ваш совет. суть: в PictireBox рисую график есть файл с историей цен. в момент...

Построить график в PictureBox
Добрый вечер. Как построить график в PictireBox, данные берем из listbox, там строк 50, содержащий тройки чисел {X, Y, C}, разделённых...

График через PictureBox
Условия задачи: 1. Построить график функции y=cos(sqrt(x)). 2. График должен отображаться на участке с шагом 0,2. 3. Использовать...

Построить график на picturebox
Доброе время суток. Суть проблемы такова- мне необходимо построить график функции на PictureBox. Вот форма. Нужна вивести з формули график....


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru