Пропорционально емкости по логарифмической шкале

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

Пропорционально емкости по логарифмической шкале

Сообщение sosed213 » 10.03.2012 (Сб) 19:00

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

Делаю что то вроде диспетчера дисков, и хочу сделать такое же наглядное отображение. Пересмотрел не мало источников, пробовал, экспериментировал, так и не удалось найти нужную формулу.

Идея такая, есть ширина окна, например 300 пикселей, и максимальный размер диска 1863 ГБ. Остальные диски каким то образом выстраиваются пропорционально емкости по логарифмической шкале.

Вот обратите внимание, например диск в 2 ТБ и флешка на 4 гб, разница в емкости огромная, а диспетчере дисков, графически разница между ними будет не столь большая.

Может кто подсказать формулу, или где можно почитать еще?

Изображение

Изображение
Не могу сказать что знаю все, но и за дурака прошу меня не считать.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Пропорционально емкости по логарифмической шкале

Сообщение FireFenix » 10.03.2012 (Сб) 19:22

sosed213 писал(а):Может кто подсказать формулу, или где можно почитать еще?

Обычно для шкалы берётся десятичный логарифм x_log = k * log10(x), где k - коэф. масштабирования
Шкала не имеет 0, каждая её декада - есть промежуток между числом умноженным на 10 (0,01 | 0,1 | 1 | 10 | 100 и т.д.), расположенные на одинаковом расстоянии. Внутри декады - каждое деление пропорционально логарифму. Пример

Где почитать? Кэп намекает на Логарифм и Логарифмический масштаб
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

sosed213
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 206
Зарегистрирован: 13.11.2007 (Вт) 21:19
Откуда: Омск

Re: Пропорционально емкости по логарифмической шкале

Сообщение sosed213 » 10.03.2012 (Сб) 19:33

FireFenix писал(а):Где почитать? Кэп намекает на Логарифм и Логарифмический масштаб


Это я читал, и перечитывал, но не смог приложить ума к этому :(
Не могу сказать что знаю все, но и за дурака прошу меня не считать.

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

Сообщение Qwertiy » 10.03.2012 (Сб) 19:58

Думаю, как-то так:

ItemSize() - размеры дисков
ItemWidth() - ширина на картинке (то, что ты хочешь найти)
TotalWidth - ширина, которую необходимо занять всеми дисками

TotalSize = Sum of ItemSize
ItemWidth(i) = Log(ItemSize(i), TotalSize))
Width = Sum of ItemWidth
ItemWidth(i) = ItemWidth(i) / Width * TotalWidth

sosed213
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 206
Зарегистрирован: 13.11.2007 (Вт) 21:19
Откуда: Омск

Re:

Сообщение sosed213 » 10.03.2012 (Сб) 20:12

Qwertiy писал(а):ItemWidth(i) = Log(ItemSize(i), TotalSize))



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

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Пропорционально емкости по логарифмической шкале

Сообщение Хакер » 10.03.2012 (Сб) 20:15

sosed213 писал(а):Можно уточнить эту строку, точнее то что после знака равно?

После знака равно стоит неправильный код.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Сообщение Qwertiy » 10.03.2012 (Сб) 20:27

Хакер писал(а):После знака равно стоит неправильный код.

Ну лишнюю скобку написал, бывает :) Я же это тут писал.

sosed213 писал(а):то что после знака равно?

Логарифм ItemSize(i) по основанию TotalSize.
Аргументы в таком порядке ведь?

sosed213
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 206
Зарегистрирован: 13.11.2007 (Вт) 21:19
Откуда: Омск

Re: Пропорционально емкости по логарифмической шкале

Сообщение sosed213 » 10.03.2012 (Сб) 20:29

Ура :D получилось. прикладываю исходник
огромное спасибо Qwertiy
Вложения
Logorifm_scale.zip
(46.62 Кб) Скачиваний: 138
Не могу сказать что знаю все, но и за дурака прошу меня не считать.

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

Сообщение Qwertiy » 10.03.2012 (Сб) 20:44

Откуда умножение на полный размер? Я писал по основанию. А вообще, можно и просто Log.
И вообще, у меня такое ощущение, что я не понял, что ты хотел получить...
Я думал, ты про ширину разделов на схеме.

sosed213
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 206
Зарегистрирован: 13.11.2007 (Вт) 21:19
Откуда: Омск

Re: Пропорционально емкости по логарифмической шкале

Сообщение sosed213 » 10.03.2012 (Сб) 20:47

Qwertiy, ты правильно понял, по крайней мере по твоему толчку все получилось, а с функцией логарифма по основанию TotalSize , самый большой диск не займет всю ширину окна. а если в Log(ItemSize(0) * TotalSize) не умножать на TotalSize, то пропорция неправильная получается, это видно из картинки которая в исходнике.
Не могу сказать что знаю все, но и за дурака прошу меня не считать.

sosed213
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 206
Зарегистрирован: 13.11.2007 (Вт) 21:19
Откуда: Омск

Re: Пропорционально емкости по логарифмической шкале

Сообщение sosed213 » 10.03.2012 (Сб) 20:51

Интересно, а можно как то изменить алгоритм чтобы не находить максимальный размер диска?
Не могу сказать что знаю все, но и за дурака прошу меня не считать.

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

Сообщение Qwertiy » 10.03.2012 (Сб) 20:54

sosed213 писал(а):Qwertiy, ты правильно понял

В том-то и дело, что нет :D Там на каждом диске выделены разделы разного размера. Я думал, что ты хочешь получить некую пропорцию для ширины этих разделов :) Для этого в формуле деление на Width, чтобы сумма длин занимала всю ширину.

sosed213
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 206
Зарегистрирован: 13.11.2007 (Вт) 21:19
Откуда: Омск

Re: Пропорционально емкости по логарифмической шкале

Сообщение sosed213 » 10.03.2012 (Сб) 20:57

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

sosed213
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 206
Зарегистрирован: 13.11.2007 (Вт) 21:19
Откуда: Омск

Re: Пропорционально емкости по логарифмической шкале

Сообщение sosed213 » 20.04.2021 (Вт) 13:11

Хе. Спустя годы я разобрался и понял, что был не прав :D

Вернувшись к этой теме снова, я всё таки сделал это. Пример кода прикладываю.
Как оказалось, для вычисления логарифма используются мегабайты, как единицы измерения.
Вложения
LogScale.zip
(10.74 Кб) Скачиваний: 109
Не могу сказать что знаю все, но и за дурака прошу меня не считать.


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

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

Сейчас этот форум просматривают: Google-бот и гости: 49

    TopList