- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 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
/*
Шаг по оси, представляет собой число из следующего ряда:
... 0.02 0.05 0.1 0.2 0.5 1 2 5 ...
next и prev позволяют перемещаться в обе стороны по ряду
после создания хранится число 1
*/
class Step
{
public:
Step()
{
scale = 1; pr = 1; type=0;
}
void next()
{
// шаг вперед
type++;
if (type==1)
scale = pr * 2;
else if (type==2)
scale = pr * 5;
else
{
type = 0;
pr *= 10;
scale = pr;
}
}
void prev()
{
// шаг назад
type--;
if (type==0)
scale = pr;
else if (type==1)
scale = pr*2;
else
{
type = 2;
pr /= 10;
scale = pr*5;
}
}
operator float()
{
return scale;
}
protected:
float scale; // текущее значение
float pr; // недомноженое значение 1 10 100 ...
int type; // 0 - x1 1 - x2 2 - x5
};
http://govnokod.ru/10117 напомнил о том, как я когда-то рисовал график, и для меток на осях потребовались те же самые красивые значения [... 0.1 0.2 0.5 1 2 5 ...]
guest 01.05.2012 07:18 # +2
Нельзя сделать тип со степенями для 2, 5 и флагом какую использовать для next / prev? Отдельно ф-ию, возвращающую уже число, ее в map.
bormand 01.05.2012 07:30 # 0
А в идеале наверное да, сделать pr int'ом, и хранить в нем степень десятки, и при необходимости домножать ее на 1, 2 или 5.
inkanus-gray 16.09.2016 11:46 # +2
https://ru.wikipedia.org/wiki/Ряды_предпочтительных_чисел_(в_технике)
При n=2 получим 1 3 10 30 100 300 1000...
При n=3 получим 1 2 5 10 20 50 100 200 500...
При n=4 получим 1 2 3 6 10 20 30 60 100 200 300 600...
При n=5 получим 1 1,6 2,5 4 6,3 10 16 25 40 63 100...
При n=6 получим 1 1,5 2 3 5 7 10 15 20 30 50 70 100...
При n=7 получим 1 1,4 1,9 2,7 3,7 5,2 7,2 10...
При n=8 получим 1 1,3 1,8 2,3 3,2 4,2 5,6 7,5 10...
При n=9 получим 1 1,3 1,7 2,2 2,8 3,6 4,6 6 7,7 10...
При n=10 получим 1 1,3 1,6 2 2,5 3,2 4 5 6,3 8 10...
Отдельные множители можно корректировать, чтобы получать более красивые числа.
Слабо́ написать класс для произвольного n, а также для принятых в технике рядов сопротивлений, диаметров резьбы и т. п.?
inkanus-gray 16.09.2016 12:08 # 0
https://github.com/matt-hayden/PreferredNumbers
https://github.com/matbra/preferred_numbers
bormand 16.09.2016 18:03 # 0
inkanus-gray 16.09.2016 19:37 # 0
Кстати, я нашёл две линейки стандартов:
1) n=5;10;20;40;80;160 (включая вариации со штрихом, с двумя штрихами и с буквой «a») для линейных размеров (ISO/DIN/ГОСТ).
2) n=6;12;24;48;96;192 для сопротивлений (IEC a. k. a. МЭК).
Для n < 5 ряды довольно простые. А есть ли стандарты для остальных значений n?
bormand 16.09.2016 19:59 # 0
Хм, там же вроде Е-ряды были?
З.Ы. В детстве всегда удивлялся, почему у резисторов такие кривые номиналы - 470, 560, 820, 680 и т.п.
inkanus-gray 16.09.2016 20:01 # 0
Обычно видел из ряда E24. Но несколько раз попадались из E96 (в делителе, задающем образцовое напряжение в блоке питания).
LispGovno 16.09.2016 18:16 # 0
inkanus-gray 16.09.2016 19:56 # 0
bormand 16.09.2016 19:46 # +1
Вот с диаметрами резьбы и теми же пинами микросхем вообще жопа - где-то метрические, где-то пиндосские...
inkanus-gray 16.09.2016 19:55 # +1
А у микросхем вообще одна и та же серия может иметь модификации в разных корпусах, один корпус в метрической системе, другой — в пиндосской.
MAKAKA 24.08.2021 15:58 # 0
MAKAKA 24.08.2021 16:02 # 0
MAKAKA 24.08.2021 16:05 # 0
MAKAKA 24.08.2021 16:08 # 0
MAPTbIwKA 24.08.2021 16:10 # 0
MAPTbIwKA 24.08.2021 16:15 # 0
MAKAKA 24.08.2021 16:18 # 0
MAPTbIwKA 24.08.2021 16:18 # 0