1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4#include <private/polardomain_p.h>
5#include <private/qabstractaxis_p.h>
6#include <QtCore/QtMath>
7
8QT_BEGIN_NAMESPACE
9
10PolarDomain::PolarDomain(QObject *parent)
11 : AbstractDomain(parent)
12{
13}
14
15PolarDomain::~PolarDomain()
16{
17}
18
19void PolarDomain::setSize(const QSizeF &size)
20{
21 Q_ASSERT(size.width() == size.height());
22 m_radius = size.height() / 2.0;
23 m_center = QPointF(m_radius, m_radius);
24 AbstractDomain::setSize(size);
25}
26
27QPointF PolarDomain::calculateGeometryPoint(const QPointF &point, bool &ok) const
28{
29 qreal r = 0.0;
30 qreal a = toAngularCoordinate(value: point.x(), ok);
31 if (ok)
32 r = toRadialCoordinate(value: point.y(), ok);
33 if (ok) {
34 return m_center + polarCoordinateToPoint(angularCoordinate: a, radialCoordinate: r);
35 } else {
36 qWarning() << "Logarithm of negative value is undefined. Empty layout returned.";
37 return QPointF();
38 }
39}
40
41QList<QPointF> PolarDomain::calculateGeometryPoints(const QList<QPointF> &list) const
42{
43 QList<QPointF> result;
44 result.resize(size: list.size());
45 bool ok;
46 qreal r = 0.0;
47 qreal a = 0.0;
48
49 for (int i = 0; i < list.size(); ++i) {
50 a = toAngularCoordinate(value: list[i].x(), ok);
51 if (ok)
52 r = toRadialCoordinate(value: list[i].y(), ok);
53 if (ok) {
54 result[i] = m_center + polarCoordinateToPoint(angularCoordinate: a, radialCoordinate: r);
55 } else {
56 qWarning() << "Logarithm of negative value is undefined. Empty layout returned.";
57 return QList<QPointF>();
58 }
59 }
60
61 return result;
62}
63
64QPointF PolarDomain::polarCoordinateToPoint(qreal angularCoordinate, qreal radialCoordinate) const
65{
66 qreal dx = qSin(v: qDegreesToRadians(degrees: angularCoordinate)) * radialCoordinate;
67 qreal dy = qCos(v: qDegreesToRadians(degrees: angularCoordinate)) * radialCoordinate;
68
69 return QPointF(dx, -dy);
70}
71
72QT_END_NAMESPACE
73
74#include "moc_polardomain_p.cpp"
75

source code of qtcharts/src/charts/domain/polardomain.cpp