Странности с центром вращения при аффинных преобразованиях объекта

Автор McAaron, 24 сентября 2019, 20:13

0 Пользователи и 1 гость просматривают эту тему.

McAaron

Есть необходимость построить изометрическое изображение параллелепипеда со взаимно простыми сторонами, например 5, 7, 9.
Его можно собрать из трех п-образных цепей, как показано на фиг. pic-011.png, или из прямоугольников.
При этом нужно соблюсти углы в 120, 60 и 30 градусов и выдержать линейные размеры. Иначе просто не склеивается конечный результат.
Алгоритм таков: наклонить цепи строго на 30 градусов, после чего повернуть их на кратное 30 градусов вокруг одной из вершин.
Мышкой это сделать невозможно, поскольку наклоны квантованы в самом лучшем случае по пиксельному растру, поэтому тангенсы всех углов будут рациональными числами, т.е. никаких 30 градусов мы не получим.

Я попробовал сделать это сначала с прямоугольником высотой 5 и шириной 7, привязав его вершинами основания четко к сетке.
После этого в режиме "преобразования-вращение" сдвинул центр вращения -- такой маленький кружочек -- в левую вершину основания.
Потом наклонил вертикальные стороны приблизительно на 30 градусов, потянув за красную "ручку", что появляется на сторонах в этом режиме. В процессе внизу в статусной строке этот угол "уклон" выводится, но нигде нет поля ввода, чтобы его просто сразу задать. В диалоге "положение и размер-наклон и радиус.." этот угол появляется в поле ввода "Угол" и его можно изменить,
После изменения до 30 градусов точно наклон меняется, но основание параллелограмма при этом сдвигается по горизонтали, чего быть не должно, поскольку центр вращения должен являться неподвижной точкой аффинного преобразования (НТАП).

И вот что оказалось -- маленькая окружность, которая появляется в режиме "преобразования-вращение" и должна якобы отмечать НТАП (центр вращения), совпадает с ним только в своем начальном состоянии. При перемещении, НТАП следует за перекрестьем "прицела", а кружочек при этом болтается в окрестности перекрестья . На рисунке 2 скриншот правильно наклоненного на 30 градусов угла -- НТАП установлена перекрестьем "прицела" в вершину, а кружочек, как можно видеть, расположен слева.

Но это еще не все. При следующем заходе в диалог "положение и размер-наклон и радиус.." обнаруживается, что вместо угла в 30 градусов ровно там  29.99 или 30.01, что наводит на следующие мысли: либо
1) углы хранятся в радианах и всякий раз переводятся туда-сюда без надлежащей коррекции
либо
2) draw рисует не в метрическом пространстве, а в растровом.


kompilainenn

Насчет правильности и логики работы в Draw - Вы читали руководство пользователя?
Насчет не точных размеров - это бага да, в чем там дело, хз
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

McAaron

Цитата: kompilainenn от 24 сентября 2019, 20:18
Насчет правильности и логики работы в Draw - Вы читали руководство пользователя?
Насчет не точных размеров - это бага да, в чем там дело, хз
А что, в руководстве написано, что реальный центр вращения и обозначенный не должны совпадать?

denkin

Для изометрии не проще ли воспользоваться 3д объектами?

McAaron

Цитата: denkin от 25 сентября 2019, 18:38
Для изометрии не проще ли воспользоваться 3д объектами?
3d-объекты? Проще? Не думаю. Попробуйте нарисовать параллелепипед со сторонами 5, 7 и 9 см, расчертить его грани сеткой с ячейкой 5 мм и повернуть в изометрию без перспективы. Лично я не нашел, ни где ввести координаты вершин в 3d, ни как привязываться к  2d-граням.
В 3d, кстати, тоже визуальный центр вращения и центр прицела не совпадают.  
...
Проапдейтился до версии 6.3.2.2 (ID сборки: 98b30e735bda24bc04ab42594c85f7fd8be07b9c)
Несовпадение присутствует.