График X-Y в PictureBox

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
KPEATOP
Бывалый
Бывалый
 
Сообщения: 291
Зарегистрирован: 02.12.2002 (Пн) 16:33
Откуда: Russia

График X-Y в PictureBox

Сообщение KPEATOP » 22.08.2013 (Чт) 13:54

Попытаюсь объяснить понятнее, что у меня происходит.
Имеется два массива X(kol,kol) и Y(kol). X - это дата и время, Y-числа формата Double. Рисую в PictureBox двумерный график X от Y:
Код: Выделить всё
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.
Как с этим бороться? Не понимаю где может быть ошибка.
Вечность пахнет нефтью

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 22.08.2013 (Чт) 13:57

Пиксели-то на экране целочисленные. И вообще, выложил бы скриншот и написал бы что-нибудь более понятное...

KPEATOP
Бывалый
Бывалый
 
Сообщения: 291
Зарегистрирован: 02.12.2002 (Пн) 16:33
Откуда: Russia

Re:

Сообщение KPEATOP » 22.08.2013 (Чт) 14:18

Qwertiy писал(а):Пиксели-то на экране целочисленные. И вообще, выложил бы скриншот и написал бы что-нибудь более понятное...

Ну и что , что пиксели целочисленные. Я масштабирую PictureBox десятичными числами Xmin, Xmax, Ymin, Ymax. И потом у меня шаг между точками с одинаковыми значениями X 0.004. Сделал скриншот , чтоб понятнее было.
Вложения
пример.JPG
пример.JPG (7.93 Кб) Просмотров: 1812
Вечность пахнет нефтью

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 22.08.2013 (Чт) 16:43

А данные?
И вообще, дебажить пробовал?

KPEATOP
Бывалый
Бывалый
 
Сообщения: 291
Зарегистрирован: 02.12.2002 (Пн) 16:33
Откуда: Russia

Re:

Сообщение KPEATOP » 23.08.2013 (Пт) 7:34

Qwertiy писал(а):И вообще, дебажить пробовал?


Не понял. Это как?
Вечность пахнет нефтью

KPEATOP
Бывалый
Бывалый
 
Сообщения: 291
Зарегистрирован: 02.12.2002 (Пн) 16:33
Откуда: Russia

Re: График X-Y в PictureBox

Сообщение KPEATOP » 23.08.2013 (Пт) 8:22

Попробовал распечатать первые 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 цифры после запятой?
Вечность пахнет нефтью

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 23.08.2013 (Пт) 8:53

KPEATOP писал(а):Не понял. Это как?

Это поставить breakpoint и по шагам смотреть, что там происходит.

KPEATOP писал(а):Если x,y - Single значит даже если я и буду делать CDbl(DDKID(i)) + CDbl(VDKID(i)), то у меня на графике все равно будет только 2 цифры после запятой?

Почему? Single - это не 2 цифры...

KPEATOP
Бывалый
Бывалый
 
Сообщения: 291
Зарегистрирован: 02.12.2002 (Пн) 16:33
Откуда: Russia

Re:

Сообщение KPEATOP » 23.08.2013 (Пт) 9:05

Qwertiy писал(а):Почему? Single - это не 2 цифры...


Я же вывел на экран. Почему при CSng(DDKID(i)) + CSng(VDKID(i)) у меня после запятой только 2 цифры (первый столбец). У меня нигде нет формата числа.
Вечность пахнет нефтью

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 23.08.2013 (Пт) 10:58

Во-первых, в Circle на самом деле передаётся не CSng(DDKID(i)) + CSng(VDKID(i)) и не CDbl(DDKID(i)) + CDbl(VDKID(i)), а CSng(CDbl(DDKID(i)) + CDbl(VDKID(i))).
Во-вторых, Print сам выбирает вормат исходя из типа. Чтобы получить больше знаков, надо явно вызвать Format.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 29

    TopList  
cron