Я использую c ++ в Qt, и я хотел бы нарисовать эллипс.
Из документации Qt я обнаружил, что могу использовать drawEllipse для рисования эллипса из граничного прямоугольника:
void QPainter::drawEllipse(const QRectF &rectangle)
и прямоугольник определяется как:
QRectF(qreal x, qreal y, qreal width, qreal height)
Однако это дает только эллипс с горизонтальной / вертикальной большой и малой осями.
Мой эллипс задается двумя наборами координат для обозначения большой оси и отношения между длиной большой и вспомогательной осей. Поэтому оси могут иметь наклон не горизонтальный и не вертикальный.
(Мне нужно использовать этот метод в любом случае, так как я также экспортирую его в файл DXF, который имеет эту запись)
Мой вопрос:
Есть ли другой способ нарисовать эллипс, кроме использования граничного прямоугольника и его вращения?
Кажется немного глупым поместить его в горизонтальный / вертикальный прямоугольник, а затем вычислить вращение, когда у меня есть координаты осей с самого начала.
Есть ли другой способ нарисовать эллипс, кроме использования граничного прямоугольника и его вращения?
Нет. Конечно, вам нужно сначала повернуть систему координат, прежде чем нарисовать эллипс.
Расчет углов поворота не требуется. Поскольку вы задали главную ось, вы можете легко нормализовать ее и получить ортогональный вектор. Эти векторы образуют ортонормированный базис, а их компоненты являются направленный косинус в матрица преобразования Вы установите на художника.
Поскольку направление главной оси уже выражено в виде вектора, вам не нужно вычислять какие-либо трансцендентные функции, чтобы получить матрицу преобразования для художника. Очень мало сложений и умножений — все, что нужно, даже если вам пришлось инвертировать матрицу (а вам нет).
Других решений пока нет …