Могу ли я нарисовать эллипс в Qt c ++ без использования прямоугольника?

Я использую c ++ в Qt, и я хотел бы нарисовать эллипс.
Из документации Qt я обнаружил, что могу использовать drawEllipse для рисования эллипса из граничного прямоугольника:

void QPainter::drawEllipse(const QRectF &rectangle)

и прямоугольник определяется как:

QRectF(qreal x, qreal y, qreal width, qreal height)

Однако это дает только эллипс с горизонтальной / вертикальной большой и малой осями.

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

Мой вопрос:

Есть ли другой способ нарисовать эллипс, кроме использования граничного прямоугольника и его вращения?

Кажется немного глупым поместить его в горизонтальный / вертикальный прямоугольник, а затем вычислить вращение, когда у меня есть координаты осей с самого начала.

5

Решение

Есть ли другой способ нарисовать эллипс, кроме использования граничного прямоугольника и его вращения?

Нет. Конечно, вам нужно сначала повернуть систему координат, прежде чем нарисовать эллипс.

Расчет углов поворота не требуется. Поскольку вы задали главную ось, вы можете легко нормализовать ее и получить ортогональный вектор. Эти векторы образуют ортонормированный базис, а их компоненты являются направленный косинус в матрица преобразования Вы установите на художника.

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]