Неправильная формула расчета

Пытался я разобраться, где же такую “пленную” схему расчета flex-shrink взяла академия. Ответ один - работал над ней гуманитарий. Не претендую на великого математика, но система расчета в корне неправильная и верна только для двух элементов (и это еще надо проверить).

Схема расчета в разы проще и доступнее. На примере задания 14:

Элементы x=200 / y=400 / z=200. (единицы значения не имеют, опустим)
Итоговый контейнер = 300
По заданию ясно, что соотношения размеров кратны 50. Да и визуально можно определить пропорции: 3 / 2 / 1 или в кратных единицах 150 / 100 / 50.

Т.о. нам надо вычислить, на какую долю от себя должен уменьшиться элемент, чтобы получить итоговый размер.
(х - итоговый размер) / х = (200-150) / 200 = 0,25
(y - итоговый размер) / y = (400-100) / 400 = 0,75
(z - итоговый размер) / z = (200-50) / 200 = 0,75

Далее находим у трех результатов НОД (наибольший общий делитель). Здесь это очевидно = 0.25

Итоговая пропорция = 1 / 3 / 3

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

29 лайков

Приветствую.

По нашей формуле давайте проверим ваше решение.

1 шаг. Рассчитываем отрицательное пространство (ОП) во флекс-контейнере:
ОП = Ширина контейнера - Сумма базовых размеров элементов

ОП = 300 - 200 + 400 + 200 = 500

2 шаг. Находим сумму произведений базовых размеров (СПБР) элементов на их коэффициенты сжатия:
СПБР = (Базовый размер1 * flex-shrink1) + (Базовый размер2 * flex-shrink2) + … + (Базовый размерn * flex-shrinkn)

СПБР = 2001 + 4003 + 200*3 = 2000

3 шаг. Для каждого элемента считаем «нормированный коэффициент сжатия» (НКС), для чего произведение базового размера элемента на его коэффициент сжатия делим на СПБР:
НКС = (Базовый размер * flex-shrink) / СПБР

НКС1 = 200 * 1 / 2000 = 0.1
НКС2 = 400 * 3 / 2000 = 0.6
НКС3 = 200 * 3 / 2000 = 0.3

4 шаг. Базовый размер элемента уменьшаем на часть ОП пропорциональную НКС элемента:
Итоговый размер = Базовый размер - (НКС * ОП)

Размер 1 элемента: 200 - 500 * 0.1 = 150
Размер 2 элемента: 400 - 500 * 0.5 = 100
Размер 3 элемента: 200 - 500 * 0.3 = 50

То есть наша формула работает для проверки коэффициентов, но не для их расчёта. Получается, что её можно использовать, когда коэффициенты известны (обычно всегда так и есть).

В этом испытании коэффициенты были неизвестны и с помощью приведённой формулы их искать было бессмысленно, можно только проверять.

Вы же вывели способ, как вычислить коэффициенты. Вы — молодец!

1 лайк

Правильно ли я понимаю, что изначально известно именно значение flex-shrink (в большинстве случаев)?
Мне все же представляется, что ширина более наглядный ориентир, а не шринк. Как это в жизни выглядит, можете пример привести?

Спасибо!

Спасибо!!!
Съекономил мне очень много времени!!! Я тоже такдо конца и не понял, что они имели ввиду в свой формуле академии, пока они тут не отписались о том что это формула проверки коэфициентов.
Твоя формула cool!!!

2 лайка

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

9 лайков

Согласен полностью, очень долго ломал голову на счет расчетов, полез в интернет и там везде эти формулы, только на форуме нашел пару адекватных объяснений.
Порой кажется что тут создатели пытаются не научить тебя что то делать, а наоборот запутать.
У меня были задания в которых идентичные мои ответы были не правельными при том что 100% совпадающие ответы самой системы(“показать ответ”) засчитывались нормально.
Но хорошо что это восновном в базовом про javascript курсе было, и надеюсь в других курсах будет меньше таких приколов.
Но если честно то на бесплатных занятиях я думал что если такие и платные то можно реально чемуто полездному научиться. Но в платных оказалось много недоработок, что печально так как ты все же за это заплатил

1 лайк

Я так понимаю, конечную ширину, ту, которую нужно получить в итоге, мы примерно ОПРЕДЕЛЯЕМ НА ГЛАЗ или с помощью каких-либо инструментов. Верно? Потом из начальной ширины вычитаем конечную и делим на начальную ширину, так находим коэффициент. Верно я думаю что она работает как для flex-shrink, так и для flex-grow (только для flex-grow берем по модулю)? Или я ошибаюсь?

Спасибо за “разбор полетов”, помогло. А вообще, если уж и придется изобретать велосипед и хоть когда-нибудь (НЕТ!) решать такие задачи, да еще и с такими условими, как в данной, то необходимо иметь идеальный глазомер. Потому что, без визуального определения размеров элементов формулу ты не перевернешь, а подгонять размеры и коэффициенты одновременно, которые являются неизвестными, а после еще проверять себя по алгоритму в 4 шага по формуле - это уже извращения для ценителей.

3 лайка