про масштаб

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
tatarin
Новичок
Новичок
Аватара пользователя
 
Сообщения: 48
Зарегистрирован: 21.09.2005 (Ср) 12:30
Откуда: Russia

про масштаб

Сообщение tatarin » 06.10.2005 (Чт) 8:35

в программе ввожу маленькие числовые данные - строится график, но маленький. получается что кривая занимает 1/10 часть графического поля. а когда ввожу большие числа - кривая строится за пределами поля. можно ли как нибудь сделать так, чтобы кривая всегда вписывалась в область графического поля. :?:

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 06.10.2005 (Чт) 9:22

а) находим самую удаленную от нуля по y точку графика (HighestPoint).
б) строим кривую, увеличенную в (ViewportHeight/HighestPoint) раз.

tatarin
Новичок
Новичок
Аватара пользователя
 
Сообщения: 48
Зарегистрирован: 21.09.2005 (Ср) 12:30
Откуда: Russia

Сообщение tatarin » 06.10.2005 (Чт) 9:38

для меня эти определения не знакомы... :?
может скинете ссылочку на литературу, где описаны эти операторы и как с ними работать...или на примерчике покажите

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 06.10.2005 (Чт) 9:51

Это не операторы, это переменные, которые ты должен определить и вычислить.
Lasciate ogni speranza, voi ch'entrate.

tatarin
Новичок
Новичок
Аватара пользователя
 
Сообщения: 48
Зарегистрирован: 21.09.2005 (Ср) 12:30
Откуда: Russia

Сообщение tatarin » 31.10.2005 (Пн) 13:55

с переменной HighestPoint понятно, а что с переменной ViewportHeight?
:?:

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 31.10.2005 (Пн) 14:54

Это высота области построения графика (viewport). В простейшем случае (график, скажем, в PictureBox pic1):
Код: Выделить всё
ViewportHeight=pic1.ScaleHeight
Моду создают модоки, а распространяют модозвоны.

tatarin
Новичок
Новичок
Аватара пользователя
 
Сообщения: 48
Зарегистрирован: 21.09.2005 (Ср) 12:30
Откуда: Russia

Сообщение tatarin » 01.11.2005 (Вт) 15:36

Amed писал(а):а) находим самую удаленную от нуля по y точку графика (HighestPoint).
б) строим кривую, увеличенную в (ViewportHeight/HighestPoint) раз.


1. нахожу самую удаленную от нуля по y точку графика, график строится. но стоит изменить какой-нибудь параметр - кривая опять "убегает"! может что-то не то делаю... :?
2. блин... пока писал первое - забыл про второе...

Zoomie
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 181
Зарегистрирован: 10.05.2004 (Пн) 10:07
Откуда: СПб

Сообщение Zoomie » 03.11.2005 (Чт) 19:29

Гм... всё просто как дважды два.

1. Находим самйю высокую точку графика
2. Находим отношение между высотой PictureBoxа и высотой точки
3. Рисуем график, где высота каждой точки равна высоте каждой точки * на полученный ранее коэффецент (при чем этот коэффецент должен быть <=1)

Вот так вот! :roll:

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 03.11.2005 (Чт) 23:07

Zoomie писал(а):при чем этот коэффецент должен быть <=1
Это кому это он так задолжал :shock:
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

Zoomie
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 181
Зарегистрирован: 10.05.2004 (Пн) 10:07
Откуда: СПб

Сообщение Zoomie » 04.11.2005 (Пт) 0:26

Стало быть, он должен Самой Высокой Точке и Высоте PictureBoxa!

:D

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 04.11.2005 (Пт) 1:00

To Zoomie
Тогда кому задолжала высота PictureBox-а, если ей запрещено быть больше "Самой Высокой Точки" ? :)
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

tatarin
Новичок
Новичок
Аватара пользователя
 
Сообщения: 48
Зарегистрирован: 21.09.2005 (Ср) 12:30
Откуда: Russia

Сообщение tatarin » 08.11.2005 (Вт) 9:04

Zoomie писал(а):Гм... всё просто как дважды два.

1. Находим самйю высокую точку графика
2. Находим отношение между высотой PictureBoxа и высотой точки
3. Рисуем график, где высота каждой точки равна высоте каждой точки * на полученный ранее коэффецент (при чем этот коэффецент должен быть <=1)

Вот так вот! :roll:


вопрос:
если мы находим самую высокую точку графика (по Y) и идем далее по порядку, то возникает подозрение что нужно найти самую "широкую" точку (по X) :?:

Zoomie
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 181
Зарегистрирован: 10.05.2004 (Пн) 10:07
Откуда: СПб

Сообщение Zoomie » 08.11.2005 (Вт) 19:02

Гм... зачем??? :shock:


ВБ еще никому не запрещал эксперементировать! :)

В крайнем случае для гармонии :) исподьзовать тот же коэфицент и для X...

tatarin
Новичок
Новичок
Аватара пользователя
 
Сообщения: 48
Зарегистрирован: 21.09.2005 (Ср) 12:30
Откуда: Russia

Сообщение tatarin » 09.11.2005 (Ср) 15:54

Zoomie писал(а):Гм... зачем??? :shock:


ВБ еще никому не запрещал эксперементировать! :)

В крайнем случае для гармонии :) исподьзовать тот же коэфицент и для X...


эксперементировать можно долго - а анализировать каждый эксперримент - это куча времени, коим я не распологаю (к сожалению). :(
хочется ведь как - и того и другого и можно без хлеба! :lol:
ЗЫ: кстати для Х будет другой коэффициент (если судить по предварительным расчетам)

Zoomie
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 181
Зарегистрирован: 10.05.2004 (Пн) 10:07
Откуда: СПб

Сообщение Zoomie » 09.11.2005 (Ср) 17:05

Если тебе неважна пропорциональность графика , то бишь отношение коээфицентов не 1, тогда ясное дело что коээфицент для X будет другим... :idea:

tatarin
Новичок
Новичок
Аватара пользователя
 
Сообщения: 48
Зарегистрирован: 21.09.2005 (Ср) 12:30
Откуда: Russia

Сообщение tatarin » 10.11.2005 (Чт) 14:02

для простоты восприятия принципа работы масштабирования я написал простейшую программку.
пробовал различные варианты - но желаемого результата не добился. ниже привожу исходник: здесь в текстбоксе ввожу радиус -->в пикчербоксе строится линия и круг.

Private Sub Picture1_dblClick()
Picture1.AutoRedraw = True
Picture1.DrawWidth = 2
Picture1.Cls 'очистка экрана
Picture1.Line (0, 0)-(Text1.Text * 2, Text1.Text * 2)
Picture1.Circle (Text1.Text * 2, Text1.Text * 2), Text1.Text
End Sub

Private Sub Text1_Click()
R = Val(Text1.Text)
Text1.Text = R
End Sub


может кто-нибудь поможет мне и объяснит на пальцах, а то у меня уже голова кругом!
хочется ведь как - и того и другого и можно без хлеба!

Zoomie
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 181
Зарегистрирован: 10.05.2004 (Пн) 10:07
Откуда: СПб

Сообщение Zoomie » 10.11.2005 (Чт) 17:18

Что именно тебе не понятно?

tatarin
Новичок
Новичок
Аватара пользователя
 
Сообщения: 48
Зарегистрирован: 21.09.2005 (Ср) 12:30
Откуда: Russia

Сообщение tatarin » 10.11.2005 (Чт) 18:27

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

Zoomie
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 181
Зарегистрирован: 10.05.2004 (Пн) 10:07
Откуда: СПб

Сообщение Zoomie » 10.11.2005 (Чт) 18:42

То бишь не выходить за границы?

Ща подумем...

GAGArin
Неистовый флудер
Неистовый флудер
 
Сообщения: 1777
Зарегистрирован: 23.12.2002 (Пн) 12:46
Откуда: я тут взялся, не знаю...

Сообщение GAGArin » 10.11.2005 (Чт) 18:52

Может я чего-то не понимаю, но зачем тогда ТекстБокс?
Диагональная линия из 0,0 всегда одна. Если её вписывать в картинку, то значение из ТекстБокса не нужно (нужны лишь габариты картинки) Аналогично с кругом, чтобы вписался в картинку есть лишь одно значение ТекстБокса. Может я торможу? :?

PS кстати писать .Text по моему в VB6 не обязательно, а вот переводить типы желательно не особо надеясь на Variant.

Zoomie
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 181
Зарегистрирован: 10.05.2004 (Пн) 10:07
Откуда: СПб

Сообщение Zoomie » 10.11.2005 (Чт) 18:56

Ну да... В принцыпе значение текстбокса второстепенное...

Можно вообще самому в коде вводить координаты...

tatarin
Новичок
Новичок
Аватара пользователя
 
Сообщения: 48
Зарегистрирован: 21.09.2005 (Ср) 12:30
Откуда: Russia

Сообщение tatarin » 11.11.2005 (Пт) 8:11

Zoomie писал(а):То бишь не выходить за границы?

Ща подумем...


точно - чтобы за границы не выходило
хочется ведь как - и того и другого и можно без хлеба!

tatarin
Новичок
Новичок
Аватара пользователя
 
Сообщения: 48
Зарегистрирован: 21.09.2005 (Ср) 12:30
Откуда: Russia

Сообщение tatarin » 11.11.2005 (Пт) 8:16

GAGArin писал(а):Может я чего-то не понимаю, но зачем тогда ТекстБокс?
Диагональная линия из 0,0 всегда одна. Если её вписывать в картинку, то значение из ТекстБокса не нужно (нужны лишь габариты картинки) Аналогично с кругом, чтобы вписался в картинку есть лишь одно значение ТекстБокса. Может я торможу? :?

PS кстати писать .Text по моему в VB6 не обязательно, а вот переводить типы желательно не особо надеясь на Variant.


как это зачем? ведь именно по этим значениям (вводимым в текстбоксе) строятся линия и окружность(чем больше значение в текстбоксе - тем больше рисунок, а чем меньше значение - тем меньше и рисунок). а если текстбокс убрать - то это немного другое...
хочется ведь как - и того и другого и можно без хлеба!

PARTYzan
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 18
Зарегистрирован: 03.11.2005 (Чт) 3:25
Откуда: Томск

Сообщение PARTYzan » 11.11.2005 (Пт) 16:25

Можешь попробовать так:
При создании каждого элемента графика проверяй самые максимальные значения по х и у, чтобы найти край. Для этого даже можешь написать функцию: задали координаты - сразу проверяем их перед рисованием - запомнили максимальные - если они больше предыдущих - заменям в переменной. Основываясь на максимальных значениях, вычисляем коээфициент "уменьшения" (или если надо график наоборот увеличить до максимальных рамеров пикчура) и уже потом рисуем все элементы с заданным коэффициентом (макс. размеры для пикчура будут ScaleHeight и ScaleWidth). :)

Глянул твой пример: (линию пока не будем брать в пример, т.к. она не заходит за границы никак) максимальную точку по х и у вычисляй так:
Text1.Text * 3 (т.е. центр точки - это уже как было задано - text1.text * 2, и надо еще прибавить сам радиус, а он равен просто text1.text).

т.е. просто добавь код после рисования
Код: Выделить всё
If Text1.Text * 3 > Picture1.ScaleHeight Then MsgBox "график вышел за границу по Y!"
If Text1.Text * 3 > Picture1.ScaleWidth Then MsgBox "график вышел за границу по X!"


p.s. это так, первое что пришло в голову. думаю натолкнул на мысль :wink:

Zoomie
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 181
Зарегистрирован: 10.05.2004 (Пн) 10:07
Откуда: СПб

Сообщение Zoomie » 11.11.2005 (Пт) 17:01

tatarin, тебе это нужно для графика?

GAGArin
Неистовый флудер
Неистовый флудер
 
Сообщения: 1777
Зарегистрирован: 23.12.2002 (Пн) 12:46
Откуда: я тут взялся, не знаю...

Сообщение GAGArin » 11.11.2005 (Пт) 17:12

Если круг у тебя рисуется так, как ты сказал, то:
picture1.hide = val(text1.text)*2
picture1.width = val(text1.text)*2
Что-то типа того.
Вот только смысла в действе не вижу хоть убейте.

PS Это правда что раньше было написано что-то про Пикчер фиксированной длинны? (из чего я и делал вывод что ТекстБокс нафиг не нужен) Или я много пива пил? Просто по моему формулировка изменилась...

tatarin
Новичок
Новичок
Аватара пользователя
 
Сообщения: 48
Зарегистрирован: 21.09.2005 (Ср) 12:30
Откуда: Russia

Сообщение tatarin » 11.11.2005 (Пт) 17:21

Zoomie писал(а):tatarin, тебе это нужно для графика?


да. поришлось по ходу своей профессиональной деятельности написать прогу для определения движения любой точки сложного складчатого профиля. а этот пример я привел здесь чтобы разобраться что да как.
хочется ведь как - и того и другого и можно без хлеба!

Zoomie
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 181
Зарегистрирован: 10.05.2004 (Пн) 10:07
Откуда: СПб

Сообщение Zoomie » 11.11.2005 (Пт) 17:46

Что типа в этом роде:

Код: Выделить всё
Dim PointY() As Integer
Dim I As Integer
Dim kX As Single
Dim kY As Single
Dim HighPoint As Integer
Dim LastX As Integer
Dim LastY As Integer

Const PointsCount = 20


Private Sub Form_Load()
Randomize Timer
LastX = 0
LastY = Picture1.Height

ReDim PointY(1 To PointsCount) As Integer

For I = LBound(PointY) To UBound(PointY)
    PointY(I) = Int(Rnd * Picture1.Height \ 2)
Next I

kX = Picture1.Width / (UBound(PointY) - LBound(PointY))

For I = LBound(PointY) To UBound(PointY)
    If PointY(I) > HighPoint Then
        HighPoint = PointY(I)
    End If
Next I

kY = Picture1.Height / HighPoint / 2

For I = LBound(PointY) To UBound(PointY)
    Picture1.Line (LastX, LastY)-(I * kX, Picture1.Height - PointY(I) * kY), vbBlue
    LastX = I * kX
    LastY = Picture1.Height - PointY(I) * kY
Next I
End Sub

PARTYzan
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 18
Зарегистрирован: 03.11.2005 (Чт) 3:25
Откуда: Томск

Сообщение PARTYzan » 12.11.2005 (Сб) 21:44

2 Zoomie:
ы, типа мой способ реализовал :lol:

Zoomie
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 181
Зарегистрирован: 10.05.2004 (Пн) 10:07
Откуда: СПб

Сообщение Zoomie » 13.11.2005 (Вс) 16:02

PARTYzan:
1) покажи потент на способ :lol:
2) об этом я говорил в самом начале форума! :)

След.

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

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

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

    TopList