Здравствуйте, _vanger_, Вы писали:
__>А аффинная геометрия -- тривиальная ерунда, специально учить которую особой необходимости нет.
Программистам, кстати, полезно понимание аффинных пространств. Вот в каких сценариях.
1) Время. В некоторых слаботипизированных API моменты времени задаются секундами (с начала эпохи), в float. И интервалы времени задаются секундами, тоже float. И у неопытных программистов начинается чехарда с манипуляциями этими float'ами, с кучей ошибок и неразберихи. Потому что нет понимания, что это разные float'ы, которые в правильном API были бы разными типами. Можно из float-момента вычесть float-момент. Но при этом получается не float-момент, а float-длительность. А если к float-моменту прибавить float-момент, то получается float-ерунда. Как так-то, вычитать можно, а прибавлять нельзя? А прибавлять, кстати, тоже можно; только не float-момент, а float-длительность. И в результате получится float-момент. И так далее, идея понятна. Это пример аффинного пространства, «точки» тут — моменты времени, «векторы» тут — интервалы времени. Точки с точками складывать нельзя, но вычитать друг из друга можно, и так далее по чеклисту из определения аффинного пространства.
2) Собственно, пространство. Есть в API тип Point с компонентами x, y. И ровно точно так же устроенный тип Vector с такими же компонентами x, y. Зачем нам два одинаковых типа, непонятно; давайте везде для позиций пихать тип Vector, и для скоростей тоже, а Point не нужен, зачем только его добавили. Ещё и сложение Point'ов глупые авторы библиотеки забыли добавить, только вычитание почему-то оставили, как так-то?