November 13th, 2020

Sidious

В продолжение про машину для голосования

По новым сведениям, программист сначала написал всё правильно, с ==:

if (vote == "Biden"){
	Biden++;
}
else if (vote == "Trump"){
	Trump++;
}


всё тщательно проверил, отладил, 100% точно всё подсчитывается.

Но потом пришёл code-review от комиссии по этике, той самой, которая следит, чтобы не было master/slave и чёрных списков (это расизм), не было демонов, равно как иконок и служб (оскорбляет чувства верующих), родители не убивали свои дочерние процессы, потому как это напрочь корёжит психику бедных программистов, и т.д.

И вот, у них новая методичка от самой Камаллы Харрис. == - это EQUALITY (равноправие), это очень хреново и проблематично. А вот = - это EQUITY (равенство результатов, когда одноногий трансгендер добьётся как минимум того же в жизни, что и любой другой человек, не дать ему должность директора компании - это очевидная дискриминация), именно оно обеспечит Diversity/Inclusion/Representation и приблизит наступление светлого будущего :) Отныне во всех программных продуктах можно использовать только его!

Так что у бедного программиста не оставалось особого выбора - не исправь он это, признают расистом и вышвырнут на улицу...
QuatCore

Дурацкая ошибка в алгоритме захвата ближней дистанции

Именно о ней хотел вчера написать, но чего-то отвлёкся.

Написал я алгоритм, стал его проверять с новой мишенью. Сначала по тангажу:


Не с первого раза, кое-чего пришлось подрихтовать, но довольно быстро оно зафурычило как надо. Цифры расставляет алгоритм, потому как у каждого уголка есть свой номер. Собственно, идентификация точек и есть самая хитрая часть. Дальше уже всё готово (помножить матрицы, получив матрицу и вектор аффинного преобразования, потом из них вычленить дальность, крен и активные тангаж с курсом), разве что ещё по отклонению вынесенных вперёд уголков относительно всего остального можно довольно легко ещё и пассивные тангаж с курсом найти, это уже всё дело техники. Тем более, сейчас три уголка, сидящие вокруг каждого центрального, образуют правильный треугольник, и если взять от них среднее арифметическое - получим позицию центрального уголка при взгляде "по нормали". В общем, халява.

А вот когда стал проверять крен, что-то пошло не так:


Наблюдаем за одним из крайних. Они имеют номера 5 и 6, и эти номера должны стоять как вкопанные, а у нас там проскакивает 1 и 2 время от времени.

Ошибка оказалась в самом начале. Я нашёл индексы i и j двух точек, максимально отдалённых друг от друга, в массиве Points[], где индексы идут от 0 до 7, и дальше хотел эти две точки запихать в самый конец массива, для чего написал:

Swap(Points[i],Points[6]);
Swap(Points[j],Points[7]);


То есть поменял местами точку под индексом i и под индексом 6, а затем - с индексами j и 7 соответственно. Что могло пойти не так??

Collapse )

Попробуем ещё раз:


УРА!

Только хотел рассказать эту историю, но сдуру зашёл на ютуб, увидел там видюшку про жульнические машины для голосования - и пришла мысль, как они могли работать :)