Contents - Qt 框架 Menu - Qt 框架 Expand - Qt 框架 Light mode - Qt 框架 Dark mode - Qt 框架 Auto light/dark mode - Qt 框架
Qt for Python
Logo
Qt for Python
  • 快速入门
  • 商业用途
  • 起步
  • 模块 API
  • 工具
  • 教程
  • 示例
    • 扩展 QML - 添加类型示例
    • 扩展 QML(高级)- BirthdayParty 基础项目
    • 扩展 QML(高级)- 继承和强制转换
    • 扩展 QML(高级)- 默认属性
    • 扩展 QML(高级)- 分组属性
    • 扩展 QML(高级)- 附加属性
    • 扩展 QML(高级)- 属性值来源
    • 扩展 QML - 绑定示例
    • 扩展 QML - 创建新类型
    • 扩展 QML - 连接到 C++ 方法和信号
    • 扩展 QML - 添加属性绑定
    • 扩展 QML - 使用自定义属性类型
    • 扩展 QML - 使用列表属性类型
    • 扩展 QML - 插件示例
    • QAbstractListModel 在 QML 中
    • 扩展 QML - 扩展对象示例
    • 扩展 QML - 方法示例
    • 扩展 QML - 对象和列表属性类型示例
    • examples/qml/signals/pytoqml1
    • examples/qml/signals/pytoqml2
    • examples/qml/signals/qmltopy1
    • examples/qml/signals/qmltopy2
    • examples/qml/signals/qmltopy3
    • examples/qml/signals/qmltopy4
    • 文本属性示例
    • 使用模型示例
    • 对象列表模型示例
    • OpenGL 下的 QML Squircle
    • 场景图绘制项示例
    • QQuickRenderControl OpenGL 示例
    • 场景图 - 自定义几何形状
    • 字符串列表模型示例
    • Qt Quick 示例 - 窗口和屏幕
    • Qt Quick Controls 2 - 画廊
    • Qt Quick Controls - 联系人列表
    • Qt Quick Controls - 文件系统浏览器
    • 小部件画廊示例
    • 通讯录示例
    • 通讯录示例
    • examples/widgets/graphicsview/anchorlayout
    • 动画拼图示例
    • 应用程序选择器示例
    • examples/widgets/mainwindows/application
    • 基本绘图示例
    • examples/widgets/itemviews/basicfiltermodel
    • 基本布局示例
    • 模糊选择效果示例
    • 边框布局示例
    • 大炮示例
    • 字符映射表示例
    • 类向导示例
    • examples/widgets/graphicsview/collidingmice
    • 同心圆示例
    • examples/widgets/graphicsview/diagramscene
    • 数字时钟示例
    • 目录视图示例
    • 浮动小部件示例
    • examples/widgets/graphicsview/dragdroprobot
    • examples/widgets/draganddrop/draggabletext
    • 放置点示例
    • 动态布局示例
    • 缓动示例
    • 可编辑树模型示例
    • examples/widgets/graphicsview/elasticnodes
    • examples/widgets/dialogs/extension
    • examples/widgets/itemviews/fetchmore
    • 流布局示例
    • GNU gettext 示例
    • examples/widgets/imageviewer
    • JSON 模型示例
    • 许可向导示例
    • examples/widgets/effects/lighting
    • Qt Linguist 示例
    • examples/widgets/mainwindows/mdi
    • 模型视图教程示例
    • examples/widgets/richtext/orderform
    • 绘图工具示例
    • 绘图示例
    • QRegularExpression 示例
    • 屏幕截图示例
    • 简单的 RHI 小部件示例
    • 自旋按钮代理示例
    • examples/widgets/dialogs/standarddialogs
    • 星级代理示例
    • 状态示例
    • 语法高亮示例
    • examples/widgets/desktop/systray
    • 标签对话框示例
    • 俄罗斯方块
    • 文本编辑器示例
    • 文本对象示例
    • examples/widgets/thread_signals
    • examples/widgets/dialogs/trivialwizard
    • 任务菜单扩展示例
    • examples/uitools/uiloader
    • MIME 类型浏览器示例
    • 设置编辑器示例
    • examples/corelib/ipc/sharedmemory
    • 曼德博罗线程示例
    • 异步 "厄拉多塞" 示例
    • 异步 "最小化" 示例
    • examples/network/blockingfortuneclient
    • 下载程序示例
    • examples/network/fortuneclient
    • examples/network/fortuneserver
    • 谷歌建议示例
    • 循环回环示例
    • examples/network/threadedfortuneserver
    • SQL 书籍示例
    • examples/dbus/listnames
    • examples/dbus/pingpong
    • DOM书签示例
    • 模拟时钟窗口示例
    • RHI窗口示例
    • 上下文信息示例
    • Hello GL2示例
    • 纹理示例
    • 线程化QOpenGLWidget示例
    • 示例绑定示例
    • 使用CMake
    • 可脚本化应用程序示例
    • 摇摆小部件示例
    • 媒体播放器示例
    • RESTful API客户端
    • 文档查看器示例
    • 小部件画廊
    • HelloGraphs示例
    • 图形画廊
    • 表面图形画廊
    • 3D柱状图示例
    • 表面示例
    • 表面示例
    • 表面示例
    • 区域图示例
    • 音频示例
    • 柱状图示例
    • 标注示例
    • 图表主题示例
    • 环形图分解示例
    • 动态样条线示例
    • 图例示例
    • 折线图和条形图示例
    • 折线图示例
    • 对数轴示例
    • 内存使用示例
    • 模型数据示例
    • 嵌套环形图示例
    • 百分比柱状图示例
    • 饼图示例
    • 所选点配置示例
    • 轻标记和点选择示例
    • QML极坐标图表示例
    • 温度记录示例
    • 音频输出示例
    • 音频源示例
    • 摄像头示例
    • 播放器示例
    • 屏幕截图示例
    • 小型浏览器示例
    • examples/webenginewidgets/markdowneditor
    • WebEngine通知示例
    • 简单浏览器
    • Qt小部件纳米浏览器示例
    • Ax查看器示例
    • 蓝牙扫描仪示例
    • 蓝牙低功耗心率游戏
    • 蓝牙低功耗心率服务器
    • 蓝牙低功耗扫描仪示例
    • Networkx查看器示例
    • OpenCV人脸检测示例
    • Pandas简单示例
    • Scikit图像示例
    • Matplotlib小部件3D示例
    • Matplotlib小部件高斯示例
    • 地图查看器示例
    • Reddit示例
    • PDF查看器示例
    • PDF查看器示例
    • 自定义几何示例
    • Qt Quick 3D简介示例
    • 程序化纹理示例
    • examples/remoteobjects/modelview
    • 空间音频平移示例
    • Hello Speak
    • 简单的Qt 3D示例
    • CAN总线示例
    • Modbus客户端示例
    • 终端示例
    • 移动方块示例
    • examples/statemachine/ping_pong
    • examples/statemachine/rogue
    • 交通灯示例
    • WebChannel独立示例
    • 简单CoAP客户端示例
    • 简单MQTT客户端示例
    • Qt OPC UA查看器示例
  • 视频
  • 部署
  • 注意事项
  • 开发者笔记
  • 模块索引
回到顶部

表面图形画廊#

表面图形画廊展示了使用Surface3D图形的三个不同的自定义功能。这些功能在应用程序中都有自己的标签。

Surface Graph Gallery Screenshot

下载 此 示例

# Copyright (C) 2023 The Qt Company Ltd.
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause

from math import sin, pi

from PySide6.QtCore import QObject, QRandomGenerator, Slot
from PySide6.QtQml import QmlElement
from PySide6.QtGui import QVector3D
from PySide6.QtDataVisualization import QSurfaceDataItem, QSurface3DSeries


QML_IMPORT_NAME = "SurfaceGallery"
QML_IMPORT_MAJOR_VERSION = 1


@QmlElement
class DataSource(QObject):

    def __init__(self, parent=None):
        super().__init__(parent)
        self.m_index = -1
        self.m_resetArray = None
        self.m_data = []

    @Slot(int, int, int, float, float, float, float, float, float)
    def generateData(self, cacheCount, rowCount, columnCount,
                     xMin, xMax, yMin, yMax, zMin, zMax):
        if not cacheCount or not rowCount or not columnCount:
            return

        self.clearData()

        xRange = xMax - xMin
        yRange = yMax - yMin
        zRange = zMax - zMin
        cacheIndexStep = columnCount / cacheCount
        cacheStep = float(cacheIndexStep) * xRange / float(columnCount)

        # Populate caches
        self.m_data = []
        rand_gen = QRandomGenerator.global_()
        for i in range(0, cacheCount):
            cache = []
            cacheXAdjustment = cacheStep * i
            cacheIndexAdjustment = cacheIndexStep * i
            for j in range(0, rowCount):
                row = []
                rowMod = (float(j)) / float(rowCount)
                yRangeMod = yRange * rowMod
                zRangeMod = zRange * rowMod
                z = zRangeMod + zMin
                rowColWaveAngleMul = pi * pi * rowMod
                rowColWaveMul = yRangeMod * 0.2
                for k in range(0, columnCount):
                    colMod = (float(k)) / float(columnCount)
                    xRangeMod = xRange * colMod
                    x = xRangeMod + xMin + cacheXAdjustment
                    colWave = sin((2.0 * pi * colMod) - (1.0 / 2.0 * pi)) + 1.0
                    rand_nr = rand_gen.generateDouble() * 0.15
                    y = ((colWave * ((sin(rowColWaveAngleMul * colMod) + 1.0)))
                         * rowColWaveMul + rand_nr * yRangeMod)

                    index = k + cacheIndexAdjustment
                    if index >= columnCount:
                        # Wrap over
                        index -= columnCount
                        x -= xRange

                    row.append(QSurfaceDataItem(QVector3D(x, y, z)))
                cache.append(row)
            self.m_data.append(cache)

    @Slot(QSurface3DSeries)
    def update(self, series):
        if series and self.m_data:
            # Each iteration uses data from a different cached array
            self.m_index += 1
            if self.m_index > len(self.m_data) - 1:
                self.m_index = 0

            array = self.m_data[self.m_index]
            newRowCount = len(array)
            newColumnCount = len(array[0])

            # Copy items from our cache to the reset array
            self.m_resetArray = []
            for i in range(0, newRowCount):
                sourceRow = array[i]
                row = []
                for j in range(0, newColumnCount):
                    row.append(QSurfaceDataItem(sourceRow[j].position()))
                self.m_resetArray.append(row)

            # Notify the proxy that data has changed
            series.dataProxy().resetArray(self.m_resetArray)

    @Slot()
    def clearData(self):
        self.m_data = []
# Copyright (C) 2023 The Qt Company Ltd.
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause

"""PySide6 port of the Qt DataVisualization qmlsurfacegallery example from Qt v6.x"""

import os
import sys
from pathlib import Path

from PySide6.QtCore import QCoreApplication, QUrl
from PySide6.QtGui import QGuiApplication
from PySide6.QtQuick import QQuickView
from PySide6.QtDataVisualization import qDefaultSurfaceFormat

from datasource import DataSource  # noqa: F401
import rc_qmlsurfacegallery  # noqa: F401


if __name__ == "__main__":
    os.environ["QSG_RHI_BACKEND"] = "opengl"
    app = QGuiApplication(sys.argv)

    viewer = QQuickView()

    # Enable antialiasing in direct rendering mode
    viewer.setFormat(qDefaultSurfaceFormat(True))

    viewer.engine().quit.connect(QCoreApplication.quit)

    viewer.setTitle("Surface Graph Gallery")

    qml_file = Path(__file__).resolve().parent / "qml" / "qmlsurfacegallery" / "main.qml"
    viewer.setSource(QUrl.fromLocalFile(qml_file))
    viewer.setResizeMode(QQuickView.SizeRootObjectToView)
    viewer.show()

    ex = app.exec()
    del viewer
    sys.exit(ex)
<RCC>
    <qresource prefix="/">
        <file>qml/qmlsurfacegallery/heightmap.png</file>
    </qresource>
</RCC>
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause

import QtQuick

Item {
    property alias model: dataModel

    ListModel {
        id: dataModel
        ListElement{ radius: "0"; angle: "0"; value: "50"; }
        ListElement{ radius: "0"; angle: "5"; value: "54.3578"; }
        ListElement{ radius: "0"; angle: "10"; value: "58.6824"; }
        ListElement{ radius: "0"; angle: "15"; value: "62.941"; }
        ListElement{ radius: "0"; angle: "20"; value: "67.101"; }
        ListElement{ radius: "0"; angle: "25"; value: "71.1309"; }
        ListElement{ radius: "0"; angle: "30"; value: "75"; }
        ListElement{ radius: "0"; angle: "35"; value: "78.6788"; }
        ListElement{ radius: "0"; angle: "40"; value: "82.1394"; }
        ListElement{ radius: "0"; angle: "45"; value: "85.3553"; }
        ListElement{ radius: "0"; angle: "50"; value: "88.3022"; }
        ListElement{ radius: "0"; angle: "55"; value: "90.9576"; }
        ListElement{ radius: "0"; angle: "60"; value: "93.3013"; }
        ListElement{ radius: "0"; angle: "65"; value: "95.3154"; }
        ListElement{ radius: "0"; angle: "70"; value: "96.9846"; }
        ListElement{ radius: "0"; angle: "75"; value: "98.2963"; }
        ListElement{ radius: "0"; angle: "80"; value: "99.2404"; }
        ListElement{ radius: "0"; angle: "85"; value: "99.8097"; }
        ListElement{ radius: "0"; angle: "90"; value: "100"; }
        ListElement{ radius: "0"; angle: "95"; value: "99.8097"; }
        ListElement{ radius: "0"; angle: "100"; value: "99.2404"; }
        ListElement{ radius: "0"; angle: "105"; value: "98.2963"; }
        ListElement{ radius: "0"; angle: "110"; value: "96.9846"; }
        ListElement{ radius: "0"; angle: "115"; value: "95.3154"; }
        ListElement{ radius: "0"; angle: "120"; value: "93.3013"; }
        ListElement{ radius: "0"; angle: "125"; value: "90.9576"; }
        ListElement{ radius: "0"; angle: "130"; value: "88.3022"; }
        ListElement{ radius: "0"; angle: "135"; value: "85.3553"; }
        ListElement{ radius: "0"; angle: "140"; value: "82.1394"; }
        ListElement{ radius: "0"; angle: "145"; value: "78.6788"; }
        ListElement{ radius: "0"; angle: "150"; value: "75"; }
        ListElement{ radius: "0"; angle: "155"; value: "71.1309"; }
        ListElement{ radius: "0"; angle: "160"; value: "67.101"; }
        ListElement{ radius: "0"; angle: "165"; value: "62.941"; }
        ListElement{ radius: "0"; angle: "170"; value: "58.6824"; }
        ListElement{ radius: "0"; angle: "175"; value: "54.3578"; }
        ListElement{ radius: "0"; angle: "180"; value: "50"; }
        ListElement{ radius: "0"; angle: "185"; value: "45.6422"; }
        ListElement{ radius: "0"; angle: "190"; value: "41.3176"; }
        ListElement{ radius: "0"; angle: "195"; value: "37.059"; }
        ListElement{ radius: "0"; angle: "200"; value: "32.899"; }
        ListElement{ radius: "0"; angle: "205"; value: "28.8691"; }
        ListElement{ radius: "0"; angle: "210"; value: "25"; }
        ListElement{ radius: "0"; angle: "215"; value: "21.3212"; }
        ListElement{ radius: "0"; angle: "220"; value: "17.8606"; }
        ListElement{ radius: "0"; angle: "225"; value: "14.6447"; }
        ListElement{ radius: "0"; angle: "230"; value: "11.6978"; }
        ListElement{ radius: "0"; angle: "235"; value: "9.0424"; }
        ListElement{ radius: "0"; angle: "240"; value: "6.69873"; }
        ListElement{ radius: "0"; angle: "245"; value: "4.68461"; }
        ListElement{ radius: "0"; angle: "250"; value: "3.01537"; }
        ListElement{ radius: "0"; angle: "255"; value: "1.70371"; }
        ListElement{ radius: "0"; angle: "260"; value: "0.759612"; }
        ListElement{ radius: "0"; angle: "265"; value: "0.190265"; }
        ListElement{ radius: "0"; angle: "270"; value: "0"; }
        ListElement{ radius: "0"; angle: "275"; value: "0.190265"; }
        ListElement{ radius: "0"; angle: "280"; value: "0.759612"; }
        ListElement{ radius: "0"; angle: "285"; value: "1.70371"; }
        ListElement{ radius: "0"; angle: "290"; value: "3.01537"; }
        ListElement{ radius: "0"; angle: "295"; value: "4.68461"; }
        ListElement{ radius: "0"; angle: "300"; value: "6.69873"; }
        ListElement{ radius: "0"; angle: "305"; value: "9.0424"; }
        ListElement{ radius: "0"; angle: "310"; value: "11.6978"; }
        ListElement{ radius: "0"; angle: "315"; value: "14.6447"; }
        ListElement{ radius: "0"; angle: "320"; value: "17.8606"; }
        ListElement{ radius: "0"; angle: "325"; value: "21.3212"; }
        ListElement{ radius: "0"; angle: "330"; value: "25"; }
        ListElement{ radius: "0"; angle: "335"; value: "28.8691"; }
        ListElement{ radius: "0"; angle: "340"; value: "32.899"; }
        ListElement{ radius: "0"; angle: "345"; value: "37.059"; }
        ListElement{ radius: "0"; angle: "350"; value: "41.3176"; }
        ListElement{ radius: "0"; angle: "355"; value: "45.6422"; }
        ListElement{ radius: "0"; angle: "360"; value: "50"; }
        ListElement{ radius: "5"; angle: "0"; value: "49.3844"; }
        ListElement{ radius: "5"; angle: "5"; value: "53.7422"; }
        ListElement{ radius: "5"; angle: "10"; value: "58.0668"; }
        ListElement{ radius: "5"; angle: "15"; value: "62.3254"; }
        ListElement{ radius: "5"; angle: "20"; value: "66.4854"; }
        ListElement{ radius: "5"; angle: "25"; value: "70.5153"; }
        ListElement{ radius: "5"; angle: "30"; value: "74.3844"; }
        ListElement{ radius: "5"; angle: "35"; value: "78.0632"; }
        ListElement{ radius: "5"; angle: "40"; value: "81.5238"; }
        ListElement{ radius: "5"; angle: "45"; value: "84.7398"; }
        ListElement{ radius: "5"; angle: "50"; value: "87.6866"; }
        ListElement{ radius: "5"; angle: "55"; value: "90.342"; }
        ListElement{ radius: "5"; angle: "60"; value: "92.6857"; }
        ListElement{ radius: "5"; angle: "65"; value: "94.6998"; }
        ListElement{ radius: "5"; angle: "70"; value: "96.369"; }
        ListElement{ radius: "5"; angle: "75"; value: "97.6807"; }
        ListElement{ radius: "5"; angle: "80"; value: "98.6248"; }
        ListElement{ radius: "5"; angle: "85"; value: "99.1942"; }
        ListElement{ radius: "5"; angle: "90"; value: "99.3844"; }
        ListElement{ radius: "5"; angle: "95"; value: "99.1942"; }
        ListElement{ radius: "5"; angle: "100"; value: "98.6248"; }
        ListElement{ radius: "5"; angle: "105"; value: "97.6807"; }
        ListElement{ radius: "5"; angle: "110"; value: "96.369"; }
        ListElement{ radius: "5"; angle: "115"; value: "94.6998"; }
        ListElement{ radius: "5"; angle: "120"; value: "92.6857"; }
        ListElement{ radius: "5"; angle: "125"; value: "90.342"; }
        ListElement{ radius: "5"; angle: "130"; value: "87.6866"; }
        ListElement{ radius: "5"; angle: "135"; value: "84.7398"; }
        ListElement{ radius: "5"; angle: "140"; value: "81.5238"; }
        ListElement{ radius: "5"; angle: "145"; value: "78.0632"; }
        ListElement{ radius: "5"; angle: "150"; value: "74.3844"; }
        ListElement{ radius: "5"; angle: "155"; value: "70.5153"; }
        ListElement{ radius: "5"; angle: "160"; value: "66.4854"; }
        ListElement{ radius: "5"; angle: "165"; value: "62.3254"; }
        ListElement{ radius: "5"; angle: "170"; value: "58.0668"; }
        ListElement{ radius: "5"; angle: "175"; value: "53.7422"; }
        ListElement{ radius: "5"; angle: "180"; value: "49.3844"; }
        ListElement{ radius: "5"; angle: "185"; value: "45.0266"; }
        ListElement{ radius: "5"; angle: "190"; value: "40.702"; }
        ListElement{ radius: "5"; angle: "195"; value: "36.4435"; }
        ListElement{ radius: "5"; angle: "200"; value: "32.2834"; }
        ListElement{ radius: "5"; angle: "205"; value: "28.2535"; }
        ListElement{ radius: "5"; angle: "210"; value: "24.3844"; }
        ListElement{ radius: "5"; angle: "215"; value: "20.7056"; }
        ListElement{ radius: "5"; angle: "220"; value: "17.245"; }
        ListElement{ radius: "5"; angle: "225"; value: "14.0291"; }
        ListElement{ radius: "5"; angle: "230"; value: "11.0822"; }
        ListElement{ radius: "5"; angle: "235"; value: "8.42681"; }
        ListElement{ radius: "5"; angle: "240"; value: "6.08315"; }
        ListElement{ radius: "5"; angle: "245"; value: "4.06903"; }
        ListElement{ radius: "5"; angle: "250"; value: "2.39979"; }
        ListElement{ radius: "5"; angle: "255"; value: "1.08813"; }
        ListElement{ radius: "5"; angle: "260"; value: "0.144029"; }
        ListElement{ radius: "5"; angle: "265"; value: "-0.425318"; }
        ListElement{ radius: "5"; angle: "270"; value: "-0.615583"; }
        ListElement{ radius: "5"; angle: "275"; value: "-0.425318"; }
        ListElement{ radius: "5"; angle: "280"; value: "0.144029"; }
        ListElement{ radius: "5"; angle: "285"; value: "1.08813"; }
        ListElement{ radius: "5"; angle: "290"; value: "2.39979"; }
        ListElement{ radius: "5"; angle: "295"; value: "4.06903"; }
        ListElement{ radius: "5"; angle: "300"; value: "6.08315"; }
        ListElement{ radius: "5"; angle: "305"; value: "8.42681"; }
        ListElement{ radius: "5"; angle: "310"; value: "11.0822"; }
        ListElement{ radius: "5"; angle: "315"; value: "14.0291"; }
        ListElement{ radius: "5"; angle: "320"; value: "17.245"; }
        ListElement{ radius: "5"; angle: "325"; value: "20.7056"; }
        ListElement{ radius: "5"; angle: "330"; value: "24.3844"; }
        ListElement{ radius: "5"; angle: "335"; value: "28.2535"; }
        ListElement{ radius: "5"; angle: "340"; value: "32.2834"; }
        ListElement{ radius: "5"; angle: "345"; value: "36.4435"; }
        ListElement{ radius: "5"; angle: "350"; value: "40.702"; }
        ListElement{ radius: "5"; angle: "355"; value: "45.0266"; }
        ListElement{ radius: "5"; angle: "360"; value: "49.3844"; }
        ListElement{ radius: "10"; angle: "0"; value: "47.5528"; }
        ListElement{ radius: "10"; angle: "5"; value: "51.9106"; }
        ListElement{ radius: "10"; angle: "10"; value: "56.2352"; }
        ListElement{ radius: "10"; angle: "15"; value: "60.4938"; }
        ListElement{ radius: "10"; angle: "20"; value: "64.6538"; }
        ListElement{ radius: "10"; angle: "25"; value: "68.6837"; }
        ListElement{ radius: "10"; angle: "30"; value: "72.5528"; }
        ListElement{ radius: "10"; angle: "35"; value: "76.2316"; }
        ListElement{ radius: "10"; angle: "40"; value: "79.6922"; }
        ListElement{ radius: "10"; angle: "45"; value: "82.9082"; }
        ListElement{ radius: "10"; angle: "50"; value: "85.855"; }
        ListElement{ radius: "10"; angle: "55"; value: "88.5104"; }
        ListElement{ radius: "10"; angle: "60"; value: "90.8541"; }
        ListElement{ radius: "10"; angle: "65"; value: "92.8682"; }
        ListElement{ radius: "10"; angle: "70"; value: "94.5375"; }
        ListElement{ radius: "10"; angle: "75"; value: "95.8491"; }
        ListElement{ radius: "10"; angle: "80"; value: "96.7932"; }
        ListElement{ radius: "10"; angle: "85"; value: "97.3626"; }
        ListElement{ radius: "10"; angle: "90"; value: "97.5528"; }
        ListElement{ radius: "10"; angle: "95"; value: "97.3626"; }
        ListElement{ radius: "10"; angle: "100"; value: "96.7932"; }
        ListElement{ radius: "10"; angle: "105"; value: "95.8491"; }
        ListElement{ radius: "10"; angle: "110"; value: "94.5375"; }
        ListElement{ radius: "10"; angle: "115"; value: "92.8682"; }
        ListElement{ radius: "10"; angle: "120"; value: "90.8541"; }
        ListElement{ radius: "10"; angle: "125"; value: "88.5104"; }
        ListElement{ radius: "10"; angle: "130"; value: "85.855"; }
        ListElement{ radius: "10"; angle: "135"; value: "82.9082"; }
        ListElement{ radius: "10"; angle: "140"; value: "79.6922"; }
        ListElement{ radius: "10"; angle: "145"; value: "76.2316"; }
        ListElement{ radius: "10"; angle: "150"; value: "72.5528"; }
        ListElement{ radius: "10"; angle: "155"; value: "68.6837"; }
        ListElement{ radius: "10"; angle: "160"; value: "64.6538"; }
        ListElement{ radius: "10"; angle: "165"; value: "60.4938"; }
        ListElement{ radius: "10"; angle: "170"; value: "56.2352"; }
        ListElement{ radius: "10"; angle: "175"; value: "51.9106"; }
        ListElement{ radius: "10"; angle: "180"; value: "47.5528"; }
        ListElement{ radius: "10"; angle: "185"; value: "43.195"; }
        ListElement{ radius: "10"; angle: "190"; value: "38.8704"; }
        ListElement{ radius: "10"; angle: "195"; value: "34.6119"; }
        ListElement{ radius: "10"; angle: "200"; value: "30.4518"; }
        ListElement{ radius: "10"; angle: "205"; value: "26.4219"; }
        ListElement{ radius: "10"; angle: "210"; value: "22.5528"; }
        ListElement{ radius: "10"; angle: "215"; value: "18.874"; }
        ListElement{ radius: "10"; angle: "220"; value: "15.4134"; }
        ListElement{ radius: "10"; angle: "225"; value: "12.1975"; }
        ListElement{ radius: "10"; angle: "230"; value: "9.2506"; }
        ListElement{ radius: "10"; angle: "235"; value: "6.59522"; }
        ListElement{ radius: "10"; angle: "240"; value: "4.25156"; }
        ListElement{ radius: "10"; angle: "245"; value: "2.23744"; }
        ListElement{ radius: "10"; angle: "250"; value: "0.568195"; }
        ListElement{ radius: "10"; angle: "255"; value: "-0.743465"; }
        ListElement{ radius: "10"; angle: "260"; value: "-1.68756"; }
        ListElement{ radius: "10"; angle: "265"; value: "-2.25691"; }
        ListElement{ radius: "10"; angle: "270"; value: "-2.44717"; }
        ListElement{ radius: "10"; angle: "275"; value: "-2.25691"; }
        ListElement{ radius: "10"; angle: "280"; value: "-1.68756"; }
        ListElement{ radius: "10"; angle: "285"; value: "-0.743465"; }
        ListElement{ radius: "10"; angle: "290"; value: "0.568195"; }
        ListElement{ radius: "10"; angle: "295"; value: "2.23744"; }
        ListElement{ radius: "10"; angle: "300"; value: "4.25156"; }
        ListElement{ radius: "10"; angle: "305"; value: "6.59522"; }
        ListElement{ radius: "10"; angle: "310"; value: "9.2506"; }
        ListElement{ radius: "10"; angle: "315"; value: "12.1975"; }
        ListElement{ radius: "10"; angle: "320"; value: "15.4134"; }
        ListElement{ radius: "10"; angle: "325"; value: "18.874"; }
        ListElement{ radius: "10"; angle: "330"; value: "22.5528"; }
        ListElement{ radius: "10"; angle: "335"; value: "26.4219"; }
        ListElement{ radius: "10"; angle: "340"; value: "30.4518"; }
        ListElement{ radius: "10"; angle: "345"; value: "34.6119"; }
        ListElement{ radius: "10"; angle: "350"; value: "38.8704"; }
        ListElement{ radius: "10"; angle: "355"; value: "43.195"; }
        ListElement{ radius: "10"; angle: "360"; value: "47.5528"; }
        ListElement{ radius: "15"; angle: "0"; value: "44.5503"; }
        ListElement{ radius: "15"; angle: "5"; value: "48.9081"; }
        ListElement{ radius: "15"; angle: "10"; value: "53.2327"; }
        ListElement{ radius: "15"; angle: "15"; value: "57.4913"; }
        ListElement{ radius: "15"; angle: "20"; value: "61.6513"; }
        ListElement{ radius: "15"; angle: "25"; value: "65.6812"; }
        ListElement{ radius: "15"; angle: "30"; value: "69.5503"; }
        ListElement{ radius: "15"; angle: "35"; value: "73.2291"; }
        ListElement{ radius: "15"; angle: "40"; value: "76.6897"; }
        ListElement{ radius: "15"; angle: "45"; value: "79.9057"; }
        ListElement{ radius: "15"; angle: "50"; value: "82.8525"; }
        ListElement{ radius: "15"; angle: "55"; value: "85.5079"; }
        ListElement{ radius: "15"; angle: "60"; value: "87.8516"; }
        ListElement{ radius: "15"; angle: "65"; value: "89.8657"; }
        ListElement{ radius: "15"; angle: "70"; value: "91.535"; }
        ListElement{ radius: "15"; angle: "75"; value: "92.8466"; }
        ListElement{ radius: "15"; angle: "80"; value: "93.7907"; }
        ListElement{ radius: "15"; angle: "85"; value: "94.3601"; }
        ListElement{ radius: "15"; angle: "90"; value: "94.5503"; }
        ListElement{ radius: "15"; angle: "95"; value: "94.3601"; }
        ListElement{ radius: "15"; angle: "100"; value: "93.7907"; }
        ListElement{ radius: "15"; angle: "105"; value: "92.8466"; }
        ListElement{ radius: "15"; angle: "110"; value: "91.535"; }
        ListElement{ radius: "15"; angle: "115"; value: "89.8657"; }
        ListElement{ radius: "15"; angle: "120"; value: "87.8516"; }
        ListElement{ radius: "15"; angle: "125"; value: "85.5079"; }
        ListElement{ radius: "15"; angle: "130"; value: "82.8525"; }
        ListElement{ radius: "15"; angle: "135"; value: "79.9057"; }
        ListElement{ radius: "15"; angle: "140"; value: "76.6897"; }
        ListElement{ radius: "15"; angle: "145"; value: "73.2291"; }
        ListElement{ radius: "15"; angle: "150"; value: "69.5503"; }
        ListElement{ radius: "15"; angle: "155"; value: "65.6812"; }
        ListElement{ radius: "15"; angle: "160"; value: "61.6513"; }
        ListElement{ radius: "15"; angle: "165"; value: "57.4913"; }
        ListElement{ radius: "15"; angle: "170"; value: "53.2327"; }
        ListElement{ radius: "15"; angle: "175"; value: "48.9081"; }
        ListElement{ radius: "15"; angle: "180"; value: "44.5503"; }
        ListElement{ radius: "15"; angle: "185"; value: "40.1925"; }
        ListElement{ radius: "15"; angle: "190"; value: "35.8679"; }
        ListElement{ radius: "15"; angle: "195"; value: "31.6094"; }
        ListElement{ radius: "15"; angle: "200"; value: "27.4493"; }
        ListElement{ radius: "15"; angle: "205"; value: "23.4194"; }
        ListElement{ radius: "15"; angle: "210"; value: "19.5503"; }
        ListElement{ radius: "15"; angle: "215"; value: "15.8715"; }
        ListElement{ radius: "15"; angle: "220"; value: "12.4109"; }
        ListElement{ radius: "15"; angle: "225"; value: "9.19499"; }
        ListElement{ radius: "15"; angle: "230"; value: "6.2481"; }
        ListElement{ radius: "15"; angle: "235"; value: "3.59272"; }
        ListElement{ radius: "15"; angle: "240"; value: "1.24906"; }
        ListElement{ radius: "15"; angle: "245"; value: "-0.765063"; }
        ListElement{ radius: "15"; angle: "250"; value: "-2.4343"; }
        ListElement{ radius: "15"; angle: "255"; value: "-3.74597"; }
        ListElement{ radius: "15"; angle: "260"; value: "-4.69006"; }
        ListElement{ radius: "15"; angle: "265"; value: "-5.25941"; }
        ListElement{ radius: "15"; angle: "270"; value: "-5.44967"; }
        ListElement{ radius: "15"; angle: "275"; value: "-5.25941"; }
        ListElement{ radius: "15"; angle: "280"; value: "-4.69006"; }
        ListElement{ radius: "15"; angle: "285"; value: "-3.74597"; }
        ListElement{ radius: "15"; angle: "290"; value: "-2.4343"; }
        ListElement{ radius: "15"; angle: "295"; value: "-0.765063"; }
        ListElement{ radius: "15"; angle: "300"; value: "1.24906"; }
        ListElement{ radius: "15"; angle: "305"; value: "3.59272"; }
        ListElement{ radius: "15"; angle: "310"; value: "6.2481"; }
        ListElement{ radius: "15"; angle: "315"; value: "9.19499"; }
        ListElement{ radius: "15"; angle: "320"; value: "12.4109"; }
        ListElement{ radius: "15"; angle: "325"; value: "15.8715"; }
        ListElement{ radius: "15"; angle: "330"; value: "19.5503"; }
        ListElement{ radius: "15"; angle: "335"; value: "23.4194"; }
        ListElement{ radius: "15"; angle: "340"; value: "27.4493"; }
        ListElement{ radius: "15"; angle: "345"; value: "31.6094"; }
        ListElement{ radius: "15"; angle: "350"; value: "35.8679"; }
        ListElement{ radius: "15"; angle: "355"; value: "40.1925"; }
        ListElement{ radius: "15"; angle: "360"; value: "44.5503"; }
        ListElement{ radius: "20"; angle: "0"; value: "40.4508"; }
        ListElement{ radius: "20"; angle: "5"; value: "44.8086"; }
        ListElement{ radius: "20"; angle: "10"; value: "49.1333"; }
        ListElement{ radius: "20"; angle: "15"; value: "53.3918"; }
        ListElement{ radius: "20"; angle: "20"; value: "57.5519"; }
        ListElement{ radius: "20"; angle: "25"; value: "61.5818"; }
        ListElement{ radius: "20"; angle: "30"; value: "65.4508"; }
        ListElement{ radius: "20"; angle: "35"; value: "69.1297"; }
        ListElement{ radius: "20"; angle: "40"; value: "72.5902"; }
        ListElement{ radius: "20"; angle: "45"; value: "75.8062"; }
        ListElement{ radius: "20"; angle: "50"; value: "78.7531"; }
        ListElement{ radius: "20"; angle: "55"; value: "81.4085"; }
        ListElement{ radius: "20"; angle: "60"; value: "83.7521"; }
        ListElement{ radius: "20"; angle: "65"; value: "85.7662"; }
        ListElement{ radius: "20"; angle: "70"; value: "87.4355"; }
        ListElement{ radius: "20"; angle: "75"; value: "88.7471"; }
        ListElement{ radius: "20"; angle: "80"; value: "89.6912"; }
        ListElement{ radius: "20"; angle: "85"; value: "90.2606"; }
        ListElement{ radius: "20"; angle: "90"; value: "90.4508"; }
        ListElement{ radius: "20"; angle: "95"; value: "90.2606"; }
        ListElement{ radius: "20"; angle: "100"; value: "89.6912"; }
        ListElement{ radius: "20"; angle: "105"; value: "88.7471"; }
        ListElement{ radius: "20"; angle: "110"; value: "87.4355"; }
        ListElement{ radius: "20"; angle: "115"; value: "85.7662"; }
        ListElement{ radius: "20"; angle: "120"; value: "83.7521"; }
        ListElement{ radius: "20"; angle: "125"; value: "81.4085"; }
        ListElement{ radius: "20"; angle: "130"; value: "78.7531"; }
        ListElement{ radius: "20"; angle: "135"; value: "75.8062"; }
        ListElement{ radius: "20"; angle: "140"; value: "72.5902"; }
        ListElement{ radius: "20"; angle: "145"; value: "69.1297"; }
        ListElement{ radius: "20"; angle: "150"; value: "65.4508"; }
        ListElement{ radius: "20"; angle: "155"; value: "61.5818"; }
        ListElement{ radius: "20"; angle: "160"; value: "57.5519"; }
        ListElement{ radius: "20"; angle: "165"; value: "53.3918"; }
        ListElement{ radius: "20"; angle: "170"; value: "49.1333"; }
        ListElement{ radius: "20"; angle: "175"; value: "44.8086"; }
        ListElement{ radius: "20"; angle: "180"; value: "40.4508"; }
        ListElement{ radius: "20"; angle: "185"; value: "36.0931"; }
        ListElement{ radius: "20"; angle: "190"; value: "31.7684"; }
        ListElement{ radius: "20"; angle: "195"; value: "27.5099"; }
        ListElement{ radius: "20"; angle: "200"; value: "23.3498"; }
        ListElement{ radius: "20"; angle: "205"; value: "19.3199"; }
        ListElement{ radius: "20"; angle: "210"; value: "15.4508"; }
        ListElement{ radius: "20"; angle: "215"; value: "11.772"; }
        ListElement{ radius: "20"; angle: "220"; value: "8.31147"; }
        ListElement{ radius: "20"; angle: "225"; value: "5.09551"; }
        ListElement{ radius: "20"; angle: "230"; value: "2.14863"; }
        ListElement{ radius: "20"; angle: "235"; value: "-0.506752"; }
        ListElement{ radius: "20"; angle: "240"; value: "-2.85042"; }
        ListElement{ radius: "20"; angle: "245"; value: "-4.86454"; }
        ListElement{ radius: "20"; angle: "250"; value: "-6.53378"; }
        ListElement{ radius: "20"; angle: "255"; value: "-7.84544"; }
        ListElement{ radius: "20"; angle: "260"; value: "-8.78954"; }
        ListElement{ radius: "20"; angle: "265"; value: "-9.35889"; }
        ListElement{ radius: "20"; angle: "270"; value: "-9.54915"; }
        ListElement{ radius: "20"; angle: "275"; value: "-9.35889"; }
        ListElement{ radius: "20"; angle: "280"; value: "-8.78954"; }
        ListElement{ radius: "20"; angle: "285"; value: "-7.84544"; }
        ListElement{ radius: "20"; angle: "290"; value: "-6.53378"; }
        ListElement{ radius: "20"; angle: "295"; value: "-4.86454"; }
        ListElement{ radius: "20"; angle: "300"; value: "-2.85042"; }
        ListElement{ radius: "20"; angle: "305"; value: "-0.506752"; }
        ListElement{ radius: "20"; angle: "310"; value: "2.14863"; }
        ListElement{ radius: "20"; angle: "315"; value: "5.09551"; }
        ListElement{ radius: "20"; angle: "320"; value: "8.31147"; }
        ListElement{ radius: "20"; angle: "325"; value: "11.772"; }
        ListElement{ radius: "20"; angle: "330"; value: "15.4508"; }
        ListElement{ radius: "20"; angle: "335"; value: "19.3199"; }
        ListElement{ radius: "20"; angle: "340"; value: "23.3498"; }
        ListElement{ radius: "20"; angle: "345"; value: "27.5099"; }
        ListElement{ radius: "20"; angle: "350"; value: "31.7684"; }
        ListElement{ radius: "20"; angle: "355"; value: "36.0931"; }
        ListElement{ radius: "20"; angle: "360"; value: "40.4508"; }
        ListElement{ radius: "25"; angle: "0"; value: "35.3553"; }
        ListElement{ radius: "25"; angle: "5"; value: "39.7131"; }
        ListElement{ radius: "25"; angle: "10"; value: "44.0377"; }
        ListElement{ radius: "25"; angle: "15"; value: "48.2963"; }
        ListElement{ radius: "25"; angle: "20"; value: "52.4563"; }
        ListElement{ radius: "25"; angle: "25"; value: "56.4863"; }
        ListElement{ radius: "25"; angle: "30"; value: "60.3553"; }
        ListElement{ radius: "25"; angle: "35"; value: "64.0342"; }
        ListElement{ radius: "25"; angle: "40"; value: "67.4947"; }
        ListElement{ radius: "25"; angle: "45"; value: "70.7107"; }
        ListElement{ radius: "25"; angle: "50"; value: "73.6576"; }
        ListElement{ radius: "25"; angle: "55"; value: "76.3129"; }
        ListElement{ radius: "25"; angle: "60"; value: "78.6566"; }
        ListElement{ radius: "25"; angle: "65"; value: "80.6707"; }
        ListElement{ radius: "25"; angle: "70"; value: "82.34"; }
        ListElement{ radius: "25"; angle: "75"; value: "83.6516"; }
        ListElement{ radius: "25"; angle: "80"; value: "84.5957"; }
        ListElement{ radius: "25"; angle: "85"; value: "85.1651"; }
        ListElement{ radius: "25"; angle: "90"; value: "85.3553"; }
        ListElement{ radius: "25"; angle: "95"; value: "85.1651"; }
        ListElement{ radius: "25"; angle: "100"; value: "84.5957"; }
        ListElement{ radius: "25"; angle: "105"; value: "83.6516"; }
        ListElement{ radius: "25"; angle: "110"; value: "82.34"; }
        ListElement{ radius: "25"; angle: "115"; value: "80.6707"; }
        ListElement{ radius: "25"; angle: "120"; value: "78.6566"; }
        ListElement{ radius: "25"; angle: "125"; value: "76.3129"; }
        ListElement{ radius: "25"; angle: "130"; value: "73.6576"; }
        ListElement{ radius: "25"; angle: "135"; value: "70.7107"; }
        ListElement{ radius: "25"; angle: "140"; value: "67.4947"; }
        ListElement{ radius: "25"; angle: "145"; value: "64.0342"; }
        ListElement{ radius: "25"; angle: "150"; value: "60.3553"; }
        ListElement{ radius: "25"; angle: "155"; value: "56.4863"; }
        ListElement{ radius: "25"; angle: "160"; value: "52.4563"; }
        ListElement{ radius: "25"; angle: "165"; value: "48.2963"; }
        ListElement{ radius: "25"; angle: "170"; value: "44.0377"; }
        ListElement{ radius: "25"; angle: "175"; value: "39.7131"; }
        ListElement{ radius: "25"; angle: "180"; value: "35.3553"; }
        ListElement{ radius: "25"; angle: "185"; value: "30.9976"; }
        ListElement{ radius: "25"; angle: "190"; value: "26.6729"; }
        ListElement{ radius: "25"; angle: "195"; value: "22.4144"; }
        ListElement{ radius: "25"; angle: "200"; value: "18.2543"; }
        ListElement{ radius: "25"; angle: "205"; value: "14.2244"; }
        ListElement{ radius: "25"; angle: "210"; value: "10.3553"; }
        ListElement{ radius: "25"; angle: "215"; value: "6.67652"; }
        ListElement{ radius: "25"; angle: "220"; value: "3.21596"; }
        ListElement{ radius: "25"; angle: "225"; value: "5.55112e-15"; }
        ListElement{ radius: "25"; angle: "230"; value: "-2.94688"; }
        ListElement{ radius: "25"; angle: "235"; value: "-5.60226"; }
        ListElement{ radius: "25"; angle: "240"; value: "-7.94593"; }
        ListElement{ radius: "25"; angle: "245"; value: "-9.96005"; }
        ListElement{ radius: "25"; angle: "250"; value: "-11.6293"; }
        ListElement{ radius: "25"; angle: "255"; value: "-12.941"; }
        ListElement{ radius: "25"; angle: "260"; value: "-13.885"; }
        ListElement{ radius: "25"; angle: "265"; value: "-14.4544"; }
        ListElement{ radius: "25"; angle: "270"; value: "-14.6447"; }
        ListElement{ radius: "25"; angle: "275"; value: "-14.4544"; }
        ListElement{ radius: "25"; angle: "280"; value: "-13.885"; }
        ListElement{ radius: "25"; angle: "285"; value: "-12.941"; }
        ListElement{ radius: "25"; angle: "290"; value: "-11.6293"; }
        ListElement{ radius: "25"; angle: "295"; value: "-9.96005"; }
        ListElement{ radius: "25"; angle: "300"; value: "-7.94593"; }
        ListElement{ radius: "25"; angle: "305"; value: "-5.60226"; }
        ListElement{ radius: "25"; angle: "310"; value: "-2.94688"; }
        ListElement{ radius: "25"; angle: "315"; value: "-5.55112e-15"; }
        ListElement{ radius: "25"; angle: "320"; value: "3.21596"; }
        ListElement{ radius: "25"; angle: "325"; value: "6.67652"; }
        ListElement{ radius: "25"; angle: "330"; value: "10.3553"; }
        ListElement{ radius: "25"; angle: "335"; value: "14.2244"; }
        ListElement{ radius: "25"; angle: "340"; value: "18.2543"; }
        ListElement{ radius: "25"; angle: "345"; value: "22.4144"; }
        ListElement{ radius: "25"; angle: "350"; value: "26.6729"; }
        ListElement{ radius: "25"; angle: "355"; value: "30.9976"; }
        ListElement{ radius: "25"; angle: "360"; value: "35.3553"; }
        ListElement{ radius: "30"; angle: "0"; value: "29.3893"; }
        ListElement{ radius: "30"; angle: "5"; value: "33.747"; }
        ListElement{ radius: "30"; angle: "10"; value: "38.0717"; }
        ListElement{ radius: "30"; angle: "15"; value: "42.3302"; }
        ListElement{ radius: "30"; angle: "20"; value: "46.4903"; }
        ListElement{ radius: "30"; angle: "25"; value: "50.5202"; }
        ListElement{ radius: "30"; angle: "30"; value: "54.3893"; }
        ListElement{ radius: "30"; angle: "35"; value: "58.0681"; }
        ListElement{ radius: "30"; angle: "40"; value: "61.5286"; }
        ListElement{ radius: "30"; angle: "45"; value: "64.7446"; }
        ListElement{ radius: "30"; angle: "50"; value: "67.6915"; }
        ListElement{ radius: "30"; angle: "55"; value: "70.3469"; }
        ListElement{ radius: "30"; angle: "60"; value: "72.6905"; }
        ListElement{ radius: "30"; angle: "65"; value: "74.7047"; }
        ListElement{ radius: "30"; angle: "70"; value: "76.3739"; }
        ListElement{ radius: "30"; angle: "75"; value: "77.6856"; }
        ListElement{ radius: "30"; angle: "80"; value: "78.6297"; }
        ListElement{ radius: "30"; angle: "85"; value: "79.199"; }
        ListElement{ radius: "30"; angle: "90"; value: "79.3893"; }
        ListElement{ radius: "30"; angle: "95"; value: "79.199"; }
        ListElement{ radius: "30"; angle: "100"; value: "78.6297"; }
        ListElement{ radius: "30"; angle: "105"; value: "77.6856"; }
        ListElement{ radius: "30"; angle: "110"; value: "76.3739"; }
        ListElement{ radius: "30"; angle: "115"; value: "74.7047"; }
        ListElement{ radius: "30"; angle: "120"; value: "72.6905"; }
        ListElement{ radius: "30"; angle: "125"; value: "70.3469"; }
        ListElement{ radius: "30"; angle: "130"; value: "67.6915"; }
        ListElement{ radius: "30"; angle: "135"; value: "64.7446"; }
        ListElement{ radius: "30"; angle: "140"; value: "61.5286"; }
        ListElement{ radius: "30"; angle: "145"; value: "58.0681"; }
        ListElement{ radius: "30"; angle: "150"; value: "54.3893"; }
        ListElement{ radius: "30"; angle: "155"; value: "50.5202"; }
        ListElement{ radius: "30"; angle: "160"; value: "46.4903"; }
        ListElement{ radius: "30"; angle: "165"; value: "42.3302"; }
        ListElement{ radius: "30"; angle: "170"; value: "38.0717"; }
        ListElement{ radius: "30"; angle: "175"; value: "33.747"; }
        ListElement{ radius: "30"; angle: "180"; value: "29.3893"; }
        ListElement{ radius: "30"; angle: "185"; value: "25.0315"; }
        ListElement{ radius: "30"; angle: "190"; value: "20.7069"; }
        ListElement{ radius: "30"; angle: "195"; value: "16.4483"; }
        ListElement{ radius: "30"; angle: "200"; value: "12.2883"; }
        ListElement{ radius: "30"; angle: "205"; value: "8.25835"; }
        ListElement{ radius: "30"; angle: "210"; value: "4.38926"; }
        ListElement{ radius: "30"; angle: "215"; value: "0.710441"; }
        ListElement{ radius: "30"; angle: "220"; value: "-2.75012"; }
        ListElement{ radius: "30"; angle: "225"; value: "-5.96608"; }
        ListElement{ radius: "30"; angle: "230"; value: "-8.91296"; }
        ListElement{ radius: "30"; angle: "235"; value: "-11.5683"; }
        ListElement{ radius: "30"; angle: "240"; value: "-13.912"; }
        ListElement{ radius: "30"; angle: "245"; value: "-15.9261"; }
        ListElement{ radius: "30"; angle: "250"; value: "-17.5954"; }
        ListElement{ radius: "30"; angle: "255"; value: "-18.907"; }
        ListElement{ radius: "30"; angle: "260"; value: "-19.8511"; }
        ListElement{ radius: "30"; angle: "265"; value: "-20.4205"; }
        ListElement{ radius: "30"; angle: "270"; value: "-20.6107"; }
        ListElement{ radius: "30"; angle: "275"; value: "-20.4205"; }
        ListElement{ radius: "30"; angle: "280"; value: "-19.8511"; }
        ListElement{ radius: "30"; angle: "285"; value: "-18.907"; }
        ListElement{ radius: "30"; angle: "290"; value: "-17.5954"; }
        ListElement{ radius: "30"; angle: "295"; value: "-15.9261"; }
        ListElement{ radius: "30"; angle: "300"; value: "-13.912"; }
        ListElement{ radius: "30"; angle: "305"; value: "-11.5683"; }
        ListElement{ radius: "30"; angle: "310"; value: "-8.91296"; }
        ListElement{ radius: "30"; angle: "315"; value: "-5.96608"; }
        ListElement{ radius: "30"; angle: "320"; value: "-2.75012"; }
        ListElement{ radius: "30"; angle: "325"; value: "0.710441"; }
        ListElement{ radius: "30"; angle: "330"; value: "4.38926"; }
        ListElement{ radius: "30"; angle: "335"; value: "8.25835"; }
        ListElement{ radius: "30"; angle: "340"; value: "12.2883"; }
        ListElement{ radius: "30"; angle: "345"; value: "16.4483"; }
        ListElement{ radius: "30"; angle: "350"; value: "20.7069"; }
        ListElement{ radius: "30"; angle: "355"; value: "25.0315"; }
        ListElement{ radius: "30"; angle: "360"; value: "29.3893"; }
        ListElement{ radius: "35"; angle: "0"; value: "22.6995"; }
        ListElement{ radius: "35"; angle: "5"; value: "27.0573"; }
        ListElement{ radius: "35"; angle: "10"; value: "31.3819"; }
        ListElement{ radius: "35"; angle: "15"; value: "35.6405"; }
        ListElement{ radius: "35"; angle: "20"; value: "39.8005"; }
        ListElement{ radius: "35"; angle: "25"; value: "43.8304"; }
        ListElement{ radius: "35"; angle: "30"; value: "47.6995"; }
        ListElement{ radius: "35"; angle: "35"; value: "51.3783"; }
        ListElement{ radius: "35"; angle: "40"; value: "54.8389"; }
        ListElement{ radius: "35"; angle: "45"; value: "58.0549"; }
        ListElement{ radius: "35"; angle: "50"; value: "61.0017"; }
        ListElement{ radius: "35"; angle: "55"; value: "63.6571"; }
        ListElement{ radius: "35"; angle: "60"; value: "66.0008"; }
        ListElement{ radius: "35"; angle: "65"; value: "68.0149"; }
        ListElement{ radius: "35"; angle: "70"; value: "69.6842"; }
        ListElement{ radius: "35"; angle: "75"; value: "70.9958"; }
        ListElement{ radius: "35"; angle: "80"; value: "71.9399"; }
        ListElement{ radius: "35"; angle: "85"; value: "72.5093"; }
        ListElement{ radius: "35"; angle: "90"; value: "72.6995"; }
        ListElement{ radius: "35"; angle: "95"; value: "72.5093"; }
        ListElement{ radius: "35"; angle: "100"; value: "71.9399"; }
        ListElement{ radius: "35"; angle: "105"; value: "70.9958"; }
        ListElement{ radius: "35"; angle: "110"; value: "69.6842"; }
        ListElement{ radius: "35"; angle: "115"; value: "68.0149"; }
        ListElement{ radius: "35"; angle: "120"; value: "66.0008"; }
        ListElement{ radius: "35"; angle: "125"; value: "63.6571"; }
        ListElement{ radius: "35"; angle: "130"; value: "61.0017"; }
        ListElement{ radius: "35"; angle: "135"; value: "58.0549"; }
        ListElement{ radius: "35"; angle: "140"; value: "54.8389"; }
        ListElement{ radius: "35"; angle: "145"; value: "51.3783"; }
        ListElement{ radius: "35"; angle: "150"; value: "47.6995"; }
        ListElement{ radius: "35"; angle: "155"; value: "43.8304"; }
        ListElement{ radius: "35"; angle: "160"; value: "39.8005"; }
        ListElement{ radius: "35"; angle: "165"; value: "35.6405"; }
        ListElement{ radius: "35"; angle: "170"; value: "31.3819"; }
        ListElement{ radius: "35"; angle: "175"; value: "27.0573"; }
        ListElement{ radius: "35"; angle: "180"; value: "22.6995"; }
        ListElement{ radius: "35"; angle: "185"; value: "18.3417"; }
        ListElement{ radius: "35"; angle: "190"; value: "14.0171"; }
        ListElement{ radius: "35"; angle: "195"; value: "9.75857"; }
        ListElement{ radius: "35"; angle: "200"; value: "5.59852"; }
        ListElement{ radius: "35"; angle: "205"; value: "1.56861"; }
        ListElement{ radius: "35"; angle: "210"; value: "-2.30048"; }
        ListElement{ radius: "35"; angle: "215"; value: "-5.9793"; }
        ListElement{ radius: "35"; angle: "220"; value: "-9.43986"; }
        ListElement{ radius: "35"; angle: "225"; value: "-12.6558"; }
        ListElement{ radius: "35"; angle: "230"; value: "-15.6027"; }
        ListElement{ radius: "35"; angle: "235"; value: "-18.2581"; }
        ListElement{ radius: "35"; angle: "240"; value: "-20.6017"; }
        ListElement{ radius: "35"; angle: "245"; value: "-22.6159"; }
        ListElement{ radius: "35"; angle: "250"; value: "-24.2851"; }
        ListElement{ radius: "35"; angle: "255"; value: "-25.5968"; }
        ListElement{ radius: "35"; angle: "260"; value: "-26.5409"; }
        ListElement{ radius: "35"; angle: "265"; value: "-27.1102"; }
        ListElement{ radius: "35"; angle: "270"; value: "-27.3005"; }
        ListElement{ radius: "35"; angle: "275"; value: "-27.1102"; }
        ListElement{ radius: "35"; angle: "280"; value: "-26.5409"; }
        ListElement{ radius: "35"; angle: "285"; value: "-25.5968"; }
        ListElement{ radius: "35"; angle: "290"; value: "-24.2851"; }
        ListElement{ radius: "35"; angle: "295"; value: "-22.6159"; }
        ListElement{ radius: "35"; angle: "300"; value: "-20.6017"; }
        ListElement{ radius: "35"; angle: "305"; value: "-18.2581"; }
        ListElement{ radius: "35"; angle: "310"; value: "-15.6027"; }
        ListElement{ radius: "35"; angle: "315"; value: "-12.6558"; }
        ListElement{ radius: "35"; angle: "320"; value: "-9.43986"; }
        ListElement{ radius: "35"; angle: "325"; value: "-5.9793"; }
        ListElement{ radius: "35"; angle: "330"; value: "-2.30048"; }
        ListElement{ radius: "35"; angle: "335"; value: "1.56861"; }
        ListElement{ radius: "35"; angle: "340"; value: "5.59852"; }
        ListElement{ radius: "35"; angle: "345"; value: "9.75857"; }
        ListElement{ radius: "35"; angle: "350"; value: "14.0171"; }
        ListElement{ radius: "35"; angle: "355"; value: "18.3417"; }
        ListElement{ radius: "35"; angle: "360"; value: "22.6995"; }
        ListElement{ radius: "40"; angle: "0"; value: "15.4508"; }
        ListElement{ radius: "40"; angle: "5"; value: "19.8086"; }
        ListElement{ radius: "40"; angle: "10"; value: "24.1333"; }
        ListElement{ radius: "40"; angle: "15"; value: "28.3918"; }
        ListElement{ radius: "40"; angle: "20"; value: "32.5519"; }
        ListElement{ radius: "40"; angle: "25"; value: "36.5818"; }
        ListElement{ radius: "40"; angle: "30"; value: "40.4508"; }
        ListElement{ radius: "40"; angle: "35"; value: "44.1297"; }
        ListElement{ radius: "40"; angle: "40"; value: "47.5902"; }
        ListElement{ radius: "40"; angle: "45"; value: "50.8062"; }
        ListElement{ radius: "40"; angle: "50"; value: "53.7531"; }
        ListElement{ radius: "40"; angle: "55"; value: "56.4085"; }
        ListElement{ radius: "40"; angle: "60"; value: "58.7521"; }
        ListElement{ radius: "40"; angle: "65"; value: "60.7662"; }
        ListElement{ radius: "40"; angle: "70"; value: "62.4355"; }
        ListElement{ radius: "40"; angle: "75"; value: "63.7471"; }
        ListElement{ radius: "40"; angle: "80"; value: "64.6912"; }
        ListElement{ radius: "40"; angle: "85"; value: "65.2606"; }
        ListElement{ radius: "40"; angle: "90"; value: "65.4508"; }
        ListElement{ radius: "40"; angle: "95"; value: "65.2606"; }
        ListElement{ radius: "40"; angle: "100"; value: "64.6912"; }
        ListElement{ radius: "40"; angle: "105"; value: "63.7471"; }
        ListElement{ radius: "40"; angle: "110"; value: "62.4355"; }
        ListElement{ radius: "40"; angle: "115"; value: "60.7662"; }
        ListElement{ radius: "40"; angle: "120"; value: "58.7521"; }
        ListElement{ radius: "40"; angle: "125"; value: "56.4085"; }
        ListElement{ radius: "40"; angle: "130"; value: "53.7531"; }
        ListElement{ radius: "40"; angle: "135"; value: "50.8062"; }
        ListElement{ radius: "40"; angle: "140"; value: "47.5902"; }
        ListElement{ radius: "40"; angle: "145"; value: "44.1297"; }
        ListElement{ radius: "40"; angle: "150"; value: "40.4508"; }
        ListElement{ radius: "40"; angle: "155"; value: "36.5818"; }
        ListElement{ radius: "40"; angle: "160"; value: "32.5519"; }
        ListElement{ radius: "40"; angle: "165"; value: "28.3918"; }
        ListElement{ radius: "40"; angle: "170"; value: "24.1333"; }
        ListElement{ radius: "40"; angle: "175"; value: "19.8086"; }
        ListElement{ radius: "40"; angle: "180"; value: "15.4508"; }
        ListElement{ radius: "40"; angle: "185"; value: "11.0931"; }
        ListElement{ radius: "40"; angle: "190"; value: "6.76844"; }
        ListElement{ radius: "40"; angle: "195"; value: "2.5099"; }
        ListElement{ radius: "40"; angle: "200"; value: "-1.65016"; }
        ListElement{ radius: "40"; angle: "205"; value: "-5.68006"; }
        ListElement{ radius: "40"; angle: "210"; value: "-9.54915"; }
        ListElement{ radius: "40"; angle: "215"; value: "-13.228"; }
        ListElement{ radius: "40"; angle: "220"; value: "-16.6885"; }
        ListElement{ radius: "40"; angle: "225"; value: "-19.9045"; }
        ListElement{ radius: "40"; angle: "230"; value: "-22.8514"; }
        ListElement{ radius: "40"; angle: "235"; value: "-25.5068"; }
        ListElement{ radius: "40"; angle: "240"; value: "-27.8504"; }
        ListElement{ radius: "40"; angle: "245"; value: "-29.8645"; }
        ListElement{ radius: "40"; angle: "250"; value: "-31.5338"; }
        ListElement{ radius: "40"; angle: "255"; value: "-32.8454"; }
        ListElement{ radius: "40"; angle: "260"; value: "-33.7895"; }
        ListElement{ radius: "40"; angle: "265"; value: "-34.3589"; }
        ListElement{ radius: "40"; angle: "270"; value: "-34.5492"; }
        ListElement{ radius: "40"; angle: "275"; value: "-34.3589"; }
        ListElement{ radius: "40"; angle: "280"; value: "-33.7895"; }
        ListElement{ radius: "40"; angle: "285"; value: "-32.8454"; }
        ListElement{ radius: "40"; angle: "290"; value: "-31.5338"; }
        ListElement{ radius: "40"; angle: "295"; value: "-29.8645"; }
        ListElement{ radius: "40"; angle: "300"; value: "-27.8504"; }
        ListElement{ radius: "40"; angle: "305"; value: "-25.5068"; }
        ListElement{ radius: "40"; angle: "310"; value: "-22.8514"; }
        ListElement{ radius: "40"; angle: "315"; value: "-19.9045"; }
        ListElement{ radius: "40"; angle: "320"; value: "-16.6885"; }
        ListElement{ radius: "40"; angle: "325"; value: "-13.228"; }
        ListElement{ radius: "40"; angle: "330"; value: "-9.54915"; }
        ListElement{ radius: "40"; angle: "335"; value: "-5.68006"; }
        ListElement{ radius: "40"; angle: "340"; value: "-1.65016"; }
        ListElement{ radius: "40"; angle: "345"; value: "2.5099"; }
        ListElement{ radius: "40"; angle: "350"; value: "6.76844"; }
        ListElement{ radius: "40"; angle: "355"; value: "11.0931"; }
        ListElement{ radius: "40"; angle: "360"; value: "15.4508"; }
        ListElement{ radius: "45"; angle: "0"; value: "7.82172"; }
        ListElement{ radius: "45"; angle: "5"; value: "12.1795"; }
        ListElement{ radius: "45"; angle: "10"; value: "16.5041"; }
        ListElement{ radius: "45"; angle: "15"; value: "20.7627"; }
        ListElement{ radius: "45"; angle: "20"; value: "24.9227"; }
        ListElement{ radius: "45"; angle: "25"; value: "28.9526"; }
        ListElement{ radius: "45"; angle: "30"; value: "32.8217"; }
        ListElement{ radius: "45"; angle: "35"; value: "36.5005"; }
        ListElement{ radius: "45"; angle: "40"; value: "39.9611"; }
        ListElement{ radius: "45"; angle: "45"; value: "43.1771"; }
        ListElement{ radius: "45"; angle: "50"; value: "46.1239"; }
        ListElement{ radius: "45"; angle: "55"; value: "48.7793"; }
        ListElement{ radius: "45"; angle: "60"; value: "51.123"; }
        ListElement{ radius: "45"; angle: "65"; value: "53.1371"; }
        ListElement{ radius: "45"; angle: "70"; value: "54.8064"; }
        ListElement{ radius: "45"; angle: "75"; value: "56.118"; }
        ListElement{ radius: "45"; angle: "80"; value: "57.0621"; }
        ListElement{ radius: "45"; angle: "85"; value: "57.6315"; }
        ListElement{ radius: "45"; angle: "90"; value: "57.8217"; }
        ListElement{ radius: "45"; angle: "95"; value: "57.6315"; }
        ListElement{ radius: "45"; angle: "100"; value: "57.0621"; }
        ListElement{ radius: "45"; angle: "105"; value: "56.118"; }
        ListElement{ radius: "45"; angle: "110"; value: "54.8064"; }
        ListElement{ radius: "45"; angle: "115"; value: "53.1371"; }
        ListElement{ radius: "45"; angle: "120"; value: "51.123"; }
        ListElement{ radius: "45"; angle: "125"; value: "48.7793"; }
        ListElement{ radius: "45"; angle: "130"; value: "46.1239"; }
        ListElement{ radius: "45"; angle: "135"; value: "43.1771"; }
        ListElement{ radius: "45"; angle: "140"; value: "39.9611"; }
        ListElement{ radius: "45"; angle: "145"; value: "36.5005"; }
        ListElement{ radius: "45"; angle: "150"; value: "32.8217"; }
        ListElement{ radius: "45"; angle: "155"; value: "28.9526"; }
        ListElement{ radius: "45"; angle: "160"; value: "24.9227"; }
        ListElement{ radius: "45"; angle: "165"; value: "20.7627"; }
        ListElement{ radius: "45"; angle: "170"; value: "16.5041"; }
        ListElement{ radius: "45"; angle: "175"; value: "12.1795"; }
        ListElement{ radius: "45"; angle: "180"; value: "7.82172"; }
        ListElement{ radius: "45"; angle: "185"; value: "3.46394"; }
        ListElement{ radius: "45"; angle: "190"; value: "-0.860686"; }
        ListElement{ radius: "45"; angle: "195"; value: "-5.11923"; }
        ListElement{ radius: "45"; angle: "200"; value: "-9.27928"; }
        ListElement{ radius: "45"; angle: "205"; value: "-13.3092"; }
        ListElement{ radius: "45"; angle: "210"; value: "-17.1783"; }
        ListElement{ radius: "45"; angle: "215"; value: "-20.8571"; }
        ListElement{ radius: "45"; angle: "220"; value: "-24.3177"; }
        ListElement{ radius: "45"; angle: "225"; value: "-27.5336"; }
        ListElement{ radius: "45"; angle: "230"; value: "-30.4805"; }
        ListElement{ radius: "45"; angle: "235"; value: "-33.1359"; }
        ListElement{ radius: "45"; angle: "240"; value: "-35.4795"; }
        ListElement{ radius: "45"; angle: "245"; value: "-37.4937"; }
        ListElement{ radius: "45"; angle: "250"; value: "-39.1629"; }
        ListElement{ radius: "45"; angle: "255"; value: "-40.4746"; }
        ListElement{ radius: "45"; angle: "260"; value: "-41.4187"; }
        ListElement{ radius: "45"; angle: "265"; value: "-41.988"; }
        ListElement{ radius: "45"; angle: "270"; value: "-42.1783"; }
        ListElement{ radius: "45"; angle: "275"; value: "-41.988"; }
        ListElement{ radius: "45"; angle: "280"; value: "-41.4187"; }
        ListElement{ radius: "45"; angle: "285"; value: "-40.4746"; }
        ListElement{ radius: "45"; angle: "290"; value: "-39.1629"; }
        ListElement{ radius: "45"; angle: "295"; value: "-37.4937"; }
        ListElement{ radius: "45"; angle: "300"; value: "-35.4795"; }
        ListElement{ radius: "45"; angle: "305"; value: "-33.1359"; }
        ListElement{ radius: "45"; angle: "310"; value: "-30.4805"; }
        ListElement{ radius: "45"; angle: "315"; value: "-27.5336"; }
        ListElement{ radius: "45"; angle: "320"; value: "-24.3177"; }
        ListElement{ radius: "45"; angle: "325"; value: "-20.8571"; }
        ListElement{ radius: "45"; angle: "330"; value: "-17.1783"; }
        ListElement{ radius: "45"; angle: "335"; value: "-13.3092"; }
        ListElement{ radius: "45"; angle: "340"; value: "-9.27928"; }
        ListElement{ radius: "45"; angle: "345"; value: "-5.11923"; }
        ListElement{ radius: "45"; angle: "350"; value: "-0.860686"; }
        ListElement{ radius: "45"; angle: "355"; value: "3.46394"; }
        ListElement{ radius: "45"; angle: "360"; value: "7.82172"; }
        ListElement{ radius: "50"; angle: "0"; value: "3.06162e-15"; }
        ListElement{ radius: "50"; angle: "5"; value: "4.35779"; }
        ListElement{ radius: "50"; angle: "10"; value: "8.68241"; }
        ListElement{ radius: "50"; angle: "15"; value: "12.941"; }
        ListElement{ radius: "50"; angle: "20"; value: "17.101"; }
        ListElement{ radius: "50"; angle: "25"; value: "21.1309"; }
        ListElement{ radius: "50"; angle: "30"; value: "25"; }
        ListElement{ radius: "50"; angle: "35"; value: "28.6788"; }
        ListElement{ radius: "50"; angle: "40"; value: "32.1394"; }
        ListElement{ radius: "50"; angle: "45"; value: "35.3553"; }
        ListElement{ radius: "50"; angle: "50"; value: "38.3022"; }
        ListElement{ radius: "50"; angle: "55"; value: "40.9576"; }
        ListElement{ radius: "50"; angle: "60"; value: "43.3013"; }
        ListElement{ radius: "50"; angle: "65"; value: "45.3154"; }
        ListElement{ radius: "50"; angle: "70"; value: "46.9846"; }
        ListElement{ radius: "50"; angle: "75"; value: "48.2963"; }
        ListElement{ radius: "50"; angle: "80"; value: "49.2404"; }
        ListElement{ radius: "50"; angle: "85"; value: "49.8097"; }
        ListElement{ radius: "50"; angle: "90"; value: "50"; }
        ListElement{ radius: "50"; angle: "95"; value: "49.8097"; }
        ListElement{ radius: "50"; angle: "100"; value: "49.2404"; }
        ListElement{ radius: "50"; angle: "105"; value: "48.2963"; }
        ListElement{ radius: "50"; angle: "110"; value: "46.9846"; }
        ListElement{ radius: "50"; angle: "115"; value: "45.3154"; }
        ListElement{ radius: "50"; angle: "120"; value: "43.3013"; }
        ListElement{ radius: "50"; angle: "125"; value: "40.9576"; }
        ListElement{ radius: "50"; angle: "130"; value: "38.3022"; }
        ListElement{ radius: "50"; angle: "135"; value: "35.3553"; }
        ListElement{ radius: "50"; angle: "140"; value: "32.1394"; }
        ListElement{ radius: "50"; angle: "145"; value: "28.6788"; }
        ListElement{ radius: "50"; angle: "150"; value: "25"; }
        ListElement{ radius: "50"; angle: "155"; value: "21.1309"; }
        ListElement{ radius: "50"; angle: "160"; value: "17.101"; }
        ListElement{ radius: "50"; angle: "165"; value: "12.941"; }
        ListElement{ radius: "50"; angle: "170"; value: "8.68241"; }
        ListElement{ radius: "50"; angle: "175"; value: "4.35779"; }
        ListElement{ radius: "50"; angle: "180"; value: "9.18485e-15"; }
        ListElement{ radius: "50"; angle: "185"; value: "-4.35779"; }
        ListElement{ radius: "50"; angle: "190"; value: "-8.68241"; }
        ListElement{ radius: "50"; angle: "195"; value: "-12.941"; }
        ListElement{ radius: "50"; angle: "200"; value: "-17.101"; }
        ListElement{ radius: "50"; angle: "205"; value: "-21.1309"; }
        ListElement{ radius: "50"; angle: "210"; value: "-25"; }
        ListElement{ radius: "50"; angle: "215"; value: "-28.6788"; }
        ListElement{ radius: "50"; angle: "220"; value: "-32.1394"; }
        ListElement{ radius: "50"; angle: "225"; value: "-35.3553"; }
        ListElement{ radius: "50"; angle: "230"; value: "-38.3022"; }
        ListElement{ radius: "50"; angle: "235"; value: "-40.9576"; }
        ListElement{ radius: "50"; angle: "240"; value: "-43.3013"; }
        ListElement{ radius: "50"; angle: "245"; value: "-45.3154"; }
        ListElement{ radius: "50"; angle: "250"; value: "-46.9846"; }
        ListElement{ radius: "50"; angle: "255"; value: "-48.2963"; }
        ListElement{ radius: "50"; angle: "260"; value: "-49.2404"; }
        ListElement{ radius: "50"; angle: "265"; value: "-49.8097"; }
        ListElement{ radius: "50"; angle: "270"; value: "-50"; }
        ListElement{ radius: "50"; angle: "275"; value: "-49.8097"; }
        ListElement{ radius: "50"; angle: "280"; value: "-49.2404"; }
        ListElement{ radius: "50"; angle: "285"; value: "-48.2963"; }
        ListElement{ radius: "50"; angle: "290"; value: "-46.9846"; }
        ListElement{ radius: "50"; angle: "295"; value: "-45.3154"; }
        ListElement{ radius: "50"; angle: "300"; value: "-43.3013"; }
        ListElement{ radius: "50"; angle: "305"; value: "-40.9576"; }
        ListElement{ radius: "50"; angle: "310"; value: "-38.3022"; }
        ListElement{ radius: "50"; angle: "315"; value: "-35.3553"; }
        ListElement{ radius: "50"; angle: "320"; value: "-32.1394"; }
        ListElement{ radius: "50"; angle: "325"; value: "-28.6788"; }
        ListElement{ radius: "50"; angle: "330"; value: "-25"; }
        ListElement{ radius: "50"; angle: "335"; value: "-21.1309"; }
        ListElement{ radius: "50"; angle: "340"; value: "-17.101"; }
        ListElement{ radius: "50"; angle: "345"; value: "-12.941"; }
        ListElement{ radius: "50"; angle: "350"; value: "-8.68241"; }
        ListElement{ radius: "50"; angle: "355"; value: "-4.35779"; }
        ListElement{ radius: "50"; angle: "360"; value: "-9.18485e-15"; }
        ListElement{ radius: "55"; angle: "0"; value: "-7.82172"; }
        ListElement{ radius: "55"; angle: "5"; value: "-3.46394"; }
        ListElement{ radius: "55"; angle: "10"; value: "0.860686"; }
        ListElement{ radius: "55"; angle: "15"; value: "5.11923"; }
        ListElement{ radius: "55"; angle: "20"; value: "9.27928"; }
        ListElement{ radius: "55"; angle: "25"; value: "13.3092"; }
        ListElement{ radius: "55"; angle: "30"; value: "17.1783"; }
        ListElement{ radius: "55"; angle: "35"; value: "20.8571"; }
        ListElement{ radius: "55"; angle: "40"; value: "24.3177"; }
        ListElement{ radius: "55"; angle: "45"; value: "27.5336"; }
        ListElement{ radius: "55"; angle: "50"; value: "30.4805"; }
        ListElement{ radius: "55"; angle: "55"; value: "33.1359"; }
        ListElement{ radius: "55"; angle: "60"; value: "35.4795"; }
        ListElement{ radius: "55"; angle: "65"; value: "37.4937"; }
        ListElement{ radius: "55"; angle: "70"; value: "39.1629"; }
        ListElement{ radius: "55"; angle: "75"; value: "40.4746"; }
        ListElement{ radius: "55"; angle: "80"; value: "41.4187"; }
        ListElement{ radius: "55"; angle: "85"; value: "41.988"; }
        ListElement{ radius: "55"; angle: "90"; value: "42.1783"; }
        ListElement{ radius: "55"; angle: "95"; value: "41.988"; }
        ListElement{ radius: "55"; angle: "100"; value: "41.4187"; }
        ListElement{ radius: "55"; angle: "105"; value: "40.4746"; }
        ListElement{ radius: "55"; angle: "110"; value: "39.1629"; }
        ListElement{ radius: "55"; angle: "115"; value: "37.4937"; }
        ListElement{ radius: "55"; angle: "120"; value: "35.4795"; }
        ListElement{ radius: "55"; angle: "125"; value: "33.1359"; }
        ListElement{ radius: "55"; angle: "130"; value: "30.4805"; }
        ListElement{ radius: "55"; angle: "135"; value: "27.5336"; }
        ListElement{ radius: "55"; angle: "140"; value: "24.3177"; }
        ListElement{ radius: "55"; angle: "145"; value: "20.8571"; }
        ListElement{ radius: "55"; angle: "150"; value: "17.1783"; }
        ListElement{ radius: "55"; angle: "155"; value: "13.3092"; }
        ListElement{ radius: "55"; angle: "160"; value: "9.27928"; }
        ListElement{ radius: "55"; angle: "165"; value: "5.11923"; }
        ListElement{ radius: "55"; angle: "170"; value: "0.860686"; }
        ListElement{ radius: "55"; angle: "175"; value: "-3.46394"; }
        ListElement{ radius: "55"; angle: "180"; value: "-7.82172"; }
        ListElement{ radius: "55"; angle: "185"; value: "-12.1795"; }
        ListElement{ radius: "55"; angle: "190"; value: "-16.5041"; }
        ListElement{ radius: "55"; angle: "195"; value: "-20.7627"; }
        ListElement{ radius: "55"; angle: "200"; value: "-24.9227"; }
        ListElement{ radius: "55"; angle: "205"; value: "-28.9526"; }
        ListElement{ radius: "55"; angle: "210"; value: "-32.8217"; }
        ListElement{ radius: "55"; angle: "215"; value: "-36.5005"; }
        ListElement{ radius: "55"; angle: "220"; value: "-39.9611"; }
        ListElement{ radius: "55"; angle: "225"; value: "-43.1771"; }
        ListElement{ radius: "55"; angle: "230"; value: "-46.1239"; }
        ListElement{ radius: "55"; angle: "235"; value: "-48.7793"; }
        ListElement{ radius: "55"; angle: "240"; value: "-51.123"; }
        ListElement{ radius: "55"; angle: "245"; value: "-53.1371"; }
        ListElement{ radius: "55"; angle: "250"; value: "-54.8064"; }
        ListElement{ radius: "55"; angle: "255"; value: "-56.118"; }
        ListElement{ radius: "55"; angle: "260"; value: "-57.0621"; }
        ListElement{ radius: "55"; angle: "265"; value: "-57.6315"; }
        ListElement{ radius: "55"; angle: "270"; value: "-57.8217"; }
        ListElement{ radius: "55"; angle: "275"; value: "-57.6315"; }
        ListElement{ radius: "55"; angle: "280"; value: "-57.0621"; }
        ListElement{ radius: "55"; angle: "285"; value: "-56.118"; }
        ListElement{ radius: "55"; angle: "290"; value: "-54.8064"; }
        ListElement{ radius: "55"; angle: "295"; value: "-53.1371"; }
        ListElement{ radius: "55"; angle: "300"; value: "-51.123"; }
        ListElement{ radius: "55"; angle: "305"; value: "-48.7793"; }
        ListElement{ radius: "55"; angle: "310"; value: "-46.1239"; }
        ListElement{ radius: "55"; angle: "315"; value: "-43.1771"; }
        ListElement{ radius: "55"; angle: "320"; value: "-39.9611"; }
        ListElement{ radius: "55"; angle: "325"; value: "-36.5005"; }
        ListElement{ radius: "55"; angle: "330"; value: "-32.8217"; }
        ListElement{ radius: "55"; angle: "335"; value: "-28.9526"; }
        ListElement{ radius: "55"; angle: "340"; value: "-24.9227"; }
        ListElement{ radius: "55"; angle: "345"; value: "-20.7627"; }
        ListElement{ radius: "55"; angle: "350"; value: "-16.5041"; }
        ListElement{ radius: "55"; angle: "355"; value: "-12.1795"; }
        ListElement{ radius: "55"; angle: "360"; value: "-7.82172"; }
        ListElement{ radius: "60"; angle: "0"; value: "-15.4508"; }
        ListElement{ radius: "60"; angle: "5"; value: "-11.0931"; }
        ListElement{ radius: "60"; angle: "10"; value: "-6.76844"; }
        ListElement{ radius: "60"; angle: "15"; value: "-2.5099"; }
        ListElement{ radius: "60"; angle: "20"; value: "1.65016"; }
        ListElement{ radius: "60"; angle: "25"; value: "5.68006"; }
        ListElement{ radius: "60"; angle: "30"; value: "9.54915"; }
        ListElement{ radius: "60"; angle: "35"; value: "13.228"; }
        ListElement{ radius: "60"; angle: "40"; value: "16.6885"; }
        ListElement{ radius: "60"; angle: "45"; value: "19.9045"; }
        ListElement{ radius: "60"; angle: "50"; value: "22.8514"; }
        ListElement{ radius: "60"; angle: "55"; value: "25.5068"; }
        ListElement{ radius: "60"; angle: "60"; value: "27.8504"; }
        ListElement{ radius: "60"; angle: "65"; value: "29.8645"; }
        ListElement{ radius: "60"; angle: "70"; value: "31.5338"; }
        ListElement{ radius: "60"; angle: "75"; value: "32.8454"; }
        ListElement{ radius: "60"; angle: "80"; value: "33.7895"; }
        ListElement{ radius: "60"; angle: "85"; value: "34.3589"; }
        ListElement{ radius: "60"; angle: "90"; value: "34.5492"; }
        ListElement{ radius: "60"; angle: "95"; value: "34.3589"; }
        ListElement{ radius: "60"; angle: "100"; value: "33.7895"; }
        ListElement{ radius: "60"; angle: "105"; value: "32.8454"; }
        ListElement{ radius: "60"; angle: "110"; value: "31.5338"; }
        ListElement{ radius: "60"; angle: "115"; value: "29.8645"; }
        ListElement{ radius: "60"; angle: "120"; value: "27.8504"; }
        ListElement{ radius: "60"; angle: "125"; value: "25.5068"; }
        ListElement{ radius: "60"; angle: "130"; value: "22.8514"; }
        ListElement{ radius: "60"; angle: "135"; value: "19.9045"; }
        ListElement{ radius: "60"; angle: "140"; value: "16.6885"; }
        ListElement{ radius: "60"; angle: "145"; value: "13.228"; }
        ListElement{ radius: "60"; angle: "150"; value: "9.54915"; }
        ListElement{ radius: "60"; angle: "155"; value: "5.68006"; }
        ListElement{ radius: "60"; angle: "160"; value: "1.65016"; }
        ListElement{ radius: "60"; angle: "165"; value: "-2.5099"; }
        ListElement{ radius: "60"; angle: "170"; value: "-6.76844"; }
        ListElement{ radius: "60"; angle: "175"; value: "-11.0931"; }
        ListElement{ radius: "60"; angle: "180"; value: "-15.4508"; }
        ListElement{ radius: "60"; angle: "185"; value: "-19.8086"; }
        ListElement{ radius: "60"; angle: "190"; value: "-24.1333"; }
        ListElement{ radius: "60"; angle: "195"; value: "-28.3918"; }
        ListElement{ radius: "60"; angle: "200"; value: "-32.5519"; }
        ListElement{ radius: "60"; angle: "205"; value: "-36.5818"; }
        ListElement{ radius: "60"; angle: "210"; value: "-40.4508"; }
        ListElement{ radius: "60"; angle: "215"; value: "-44.1297"; }
        ListElement{ radius: "60"; angle: "220"; value: "-47.5902"; }
        ListElement{ radius: "60"; angle: "225"; value: "-50.8062"; }
        ListElement{ radius: "60"; angle: "230"; value: "-53.7531"; }
        ListElement{ radius: "60"; angle: "235"; value: "-56.4085"; }
        ListElement{ radius: "60"; angle: "240"; value: "-58.7521"; }
        ListElement{ radius: "60"; angle: "245"; value: "-60.7662"; }
        ListElement{ radius: "60"; angle: "250"; value: "-62.4355"; }
        ListElement{ radius: "60"; angle: "255"; value: "-63.7471"; }
        ListElement{ radius: "60"; angle: "260"; value: "-64.6912"; }
        ListElement{ radius: "60"; angle: "265"; value: "-65.2606"; }
        ListElement{ radius: "60"; angle: "270"; value: "-65.4508"; }
        ListElement{ radius: "60"; angle: "275"; value: "-65.2606"; }
        ListElement{ radius: "60"; angle: "280"; value: "-64.6912"; }
        ListElement{ radius: "60"; angle: "285"; value: "-63.7471"; }
        ListElement{ radius: "60"; angle: "290"; value: "-62.4355"; }
        ListElement{ radius: "60"; angle: "295"; value: "-60.7662"; }
        ListElement{ radius: "60"; angle: "300"; value: "-58.7521"; }
        ListElement{ radius: "60"; angle: "305"; value: "-56.4085"; }
        ListElement{ radius: "60"; angle: "310"; value: "-53.7531"; }
        ListElement{ radius: "60"; angle: "315"; value: "-50.8062"; }
        ListElement{ radius: "60"; angle: "320"; value: "-47.5902"; }
        ListElement{ radius: "60"; angle: "325"; value: "-44.1297"; }
        ListElement{ radius: "60"; angle: "330"; value: "-40.4508"; }
        ListElement{ radius: "60"; angle: "335"; value: "-36.5818"; }
        ListElement{ radius: "60"; angle: "340"; value: "-32.5519"; }
        ListElement{ radius: "60"; angle: "345"; value: "-28.3918"; }
        ListElement{ radius: "60"; angle: "350"; value: "-24.1333"; }
        ListElement{ radius: "60"; angle: "355"; value: "-19.8086"; }
        ListElement{ radius: "60"; angle: "360"; value: "-15.4508"; }
        ListElement{ radius: "65"; angle: "0"; value: "-22.6995"; }
        ListElement{ radius: "65"; angle: "5"; value: "-18.3417"; }
        ListElement{ radius: "65"; angle: "10"; value: "-14.0171"; }
        ListElement{ radius: "65"; angle: "15"; value: "-9.75857"; }
        ListElement{ radius: "65"; angle: "20"; value: "-5.59852"; }
        ListElement{ radius: "65"; angle: "25"; value: "-1.56861"; }
        ListElement{ radius: "65"; angle: "30"; value: "2.30048"; }
        ListElement{ radius: "65"; angle: "35"; value: "5.9793"; }
        ListElement{ radius: "65"; angle: "40"; value: "9.43986"; }
        ListElement{ radius: "65"; angle: "45"; value: "12.6558"; }
        ListElement{ radius: "65"; angle: "50"; value: "15.6027"; }
        ListElement{ radius: "65"; angle: "55"; value: "18.2581"; }
        ListElement{ radius: "65"; angle: "60"; value: "20.6017"; }
        ListElement{ radius: "65"; angle: "65"; value: "22.6159"; }
        ListElement{ radius: "65"; angle: "70"; value: "24.2851"; }
        ListElement{ radius: "65"; angle: "75"; value: "25.5968"; }
        ListElement{ radius: "65"; angle: "80"; value: "26.5409"; }
        ListElement{ radius: "65"; angle: "85"; value: "27.1102"; }
        ListElement{ radius: "65"; angle: "90"; value: "27.3005"; }
        ListElement{ radius: "65"; angle: "95"; value: "27.1102"; }
        ListElement{ radius: "65"; angle: "100"; value: "26.5409"; }
        ListElement{ radius: "65"; angle: "105"; value: "25.5968"; }
        ListElement{ radius: "65"; angle: "110"; value: "24.2851"; }
        ListElement{ radius: "65"; angle: "115"; value: "22.6159"; }
        ListElement{ radius: "65"; angle: "120"; value: "20.6017"; }
        ListElement{ radius: "65"; angle: "125"; value: "18.2581"; }
        ListElement{ radius: "65"; angle: "130"; value: "15.6027"; }
        ListElement{ radius: "65"; angle: "135"; value: "12.6558"; }
        ListElement{ radius: "65"; angle: "140"; value: "9.43986"; }
        ListElement{ radius: "65"; angle: "145"; value: "5.9793"; }
        ListElement{ radius: "65"; angle: "150"; value: "2.30048"; }
        ListElement{ radius: "65"; angle: "155"; value: "-1.56861"; }
        ListElement{ radius: "65"; angle: "160"; value: "-5.59852"; }
        ListElement{ radius: "65"; angle: "165"; value: "-9.75857"; }
        ListElement{ radius: "65"; angle: "170"; value: "-14.0171"; }
        ListElement{ radius: "65"; angle: "175"; value: "-18.3417"; }
        ListElement{ radius: "65"; angle: "180"; value: "-22.6995"; }
        ListElement{ radius: "65"; angle: "185"; value: "-27.0573"; }
        ListElement{ radius: "65"; angle: "190"; value: "-31.3819"; }
        ListElement{ radius: "65"; angle: "195"; value: "-35.6405"; }
        ListElement{ radius: "65"; angle: "200"; value: "-39.8005"; }
        ListElement{ radius: "65"; angle: "205"; value: "-43.8304"; }
        ListElement{ radius: "65"; angle: "210"; value: "-47.6995"; }
        ListElement{ radius: "65"; angle: "215"; value: "-51.3783"; }
        ListElement{ radius: "65"; angle: "220"; value: "-54.8389"; }
        ListElement{ radius: "65"; angle: "225"; value: "-58.0549"; }
        ListElement{ radius: "65"; angle: "230"; value: "-61.0017"; }
        ListElement{ radius: "65"; angle: "235"; value: "-63.6571"; }
        ListElement{ radius: "65"; angle: "240"; value: "-66.0008"; }
        ListElement{ radius: "65"; angle: "245"; value: "-68.0149"; }
        ListElement{ radius: "65"; angle: "250"; value: "-69.6842"; }
        ListElement{ radius: "65"; angle: "255"; value: "-70.9958"; }
        ListElement{ radius: "65"; angle: "260"; value: "-71.9399"; }
        ListElement{ radius: "65"; angle: "265"; value: "-72.5093"; }
        ListElement{ radius: "65"; angle: "270"; value: "-72.6995"; }
        ListElement{ radius: "65"; angle: "275"; value: "-72.5093"; }
        ListElement{ radius: "65"; angle: "280"; value: "-71.9399"; }
        ListElement{ radius: "65"; angle: "285"; value: "-70.9958"; }
        ListElement{ radius: "65"; angle: "290"; value: "-69.6842"; }
        ListElement{ radius: "65"; angle: "295"; value: "-68.0149"; }
        ListElement{ radius: "65"; angle: "300"; value: "-66.0008"; }
        ListElement{ radius: "65"; angle: "305"; value: "-63.6571"; }
        ListElement{ radius: "65"; angle: "310"; value: "-61.0017"; }
        ListElement{ radius: "65"; angle: "315"; value: "-58.0549"; }
        ListElement{ radius: "65"; angle: "320"; value: "-54.8389"; }
        ListElement{ radius: "65"; angle: "325"; value: "-51.3783"; }
        ListElement{ radius: "65"; angle: "330"; value: "-47.6995"; }
        ListElement{ radius: "65"; angle: "335"; value: "-43.8304"; }
        ListElement{ radius: "65"; angle: "340"; value: "-39.8005"; }
        ListElement{ radius: "65"; angle: "345"; value: "-35.6405"; }
        ListElement{ radius: "65"; angle: "350"; value: "-31.3819"; }
        ListElement{ radius: "65"; angle: "355"; value: "-27.0573"; }
        ListElement{ radius: "65"; angle: "360"; value: "-22.6995"; }
        ListElement{ radius: "70"; angle: "0"; value: "-29.3893"; }
        ListElement{ radius: "70"; angle: "5"; value: "-25.0315"; }
        ListElement{ radius: "70"; angle: "10"; value: "-20.7069"; }
        ListElement{ radius: "70"; angle: "15"; value: "-16.4483"; }
        ListElement{ radius: "70"; angle: "20"; value: "-12.2883"; }
        ListElement{ radius: "70"; angle: "25"; value: "-8.25835"; }
        ListElement{ radius: "70"; angle: "30"; value: "-4.38926"; }
        ListElement{ radius: "70"; angle: "35"; value: "-0.710441"; }
        ListElement{ radius: "70"; angle: "40"; value: "2.75012"; }
        ListElement{ radius: "70"; angle: "45"; value: "5.96608"; }
        ListElement{ radius: "70"; angle: "50"; value: "8.91296"; }
        ListElement{ radius: "70"; angle: "55"; value: "11.5683"; }
        ListElement{ radius: "70"; angle: "60"; value: "13.912"; }
        ListElement{ radius: "70"; angle: "65"; value: "15.9261"; }
        ListElement{ radius: "70"; angle: "70"; value: "17.5954"; }
        ListElement{ radius: "70"; angle: "75"; value: "18.907"; }
        ListElement{ radius: "70"; angle: "80"; value: "19.8511"; }
        ListElement{ radius: "70"; angle: "85"; value: "20.4205"; }
        ListElement{ radius: "70"; angle: "90"; value: "20.6107"; }
        ListElement{ radius: "70"; angle: "95"; value: "20.4205"; }
        ListElement{ radius: "70"; angle: "100"; value: "19.8511"; }
        ListElement{ radius: "70"; angle: "105"; value: "18.907"; }
        ListElement{ radius: "70"; angle: "110"; value: "17.5954"; }
        ListElement{ radius: "70"; angle: "115"; value: "15.9261"; }
        ListElement{ radius: "70"; angle: "120"; value: "13.912"; }
        ListElement{ radius: "70"; angle: "125"; value: "11.5683"; }
        ListElement{ radius: "70"; angle: "130"; value: "8.91296"; }
        ListElement{ radius: "70"; angle: "135"; value: "5.96608"; }
        ListElement{ radius: "70"; angle: "140"; value: "2.75012"; }
        ListElement{ radius: "70"; angle: "145"; value: "-0.710441"; }
        ListElement{ radius: "70"; angle: "150"; value: "-4.38926"; }
        ListElement{ radius: "70"; angle: "155"; value: "-8.25835"; }
        ListElement{ radius: "70"; angle: "160"; value: "-12.2883"; }
        ListElement{ radius: "70"; angle: "165"; value: "-16.4483"; }
        ListElement{ radius: "70"; angle: "170"; value: "-20.7069"; }
        ListElement{ radius: "70"; angle: "175"; value: "-25.0315"; }
        ListElement{ radius: "70"; angle: "180"; value: "-29.3893"; }
        ListElement{ radius: "70"; angle: "185"; value: "-33.747"; }
        ListElement{ radius: "70"; angle: "190"; value: "-38.0717"; }
        ListElement{ radius: "70"; angle: "195"; value: "-42.3302"; }
        ListElement{ radius: "70"; angle: "200"; value: "-46.4903"; }
        ListElement{ radius: "70"; angle: "205"; value: "-50.5202"; }
        ListElement{ radius: "70"; angle: "210"; value: "-54.3893"; }
        ListElement{ radius: "70"; angle: "215"; value: "-58.0681"; }
        ListElement{ radius: "70"; angle: "220"; value: "-61.5286"; }
        ListElement{ radius: "70"; angle: "225"; value: "-64.7446"; }
        ListElement{ radius: "70"; angle: "230"; value: "-67.6915"; }
        ListElement{ radius: "70"; angle: "235"; value: "-70.3469"; }
        ListElement{ radius: "70"; angle: "240"; value: "-72.6905"; }
        ListElement{ radius: "70"; angle: "245"; value: "-74.7047"; }
        ListElement{ radius: "70"; angle: "250"; value: "-76.3739"; }
        ListElement{ radius: "70"; angle: "255"; value: "-77.6856"; }
        ListElement{ radius: "70"; angle: "260"; value: "-78.6297"; }
        ListElement{ radius: "70"; angle: "265"; value: "-79.199"; }
        ListElement{ radius: "70"; angle: "270"; value: "-79.3893"; }
        ListElement{ radius: "70"; angle: "275"; value: "-79.199"; }
        ListElement{ radius: "70"; angle: "280"; value: "-78.6297"; }
        ListElement{ radius: "70"; angle: "285"; value: "-77.6856"; }
        ListElement{ radius: "70"; angle: "290"; value: "-76.3739"; }
        ListElement{ radius: "70"; angle: "295"; value: "-74.7047"; }
        ListElement{ radius: "70"; angle: "300"; value: "-72.6905"; }
        ListElement{ radius: "70"; angle: "305"; value: "-70.3469"; }
        ListElement{ radius: "70"; angle: "310"; value: "-67.6915"; }
        ListElement{ radius: "70"; angle: "315"; value: "-64.7446"; }
        ListElement{ radius: "70"; angle: "320"; value: "-61.5286"; }
        ListElement{ radius: "70"; angle: "325"; value: "-58.0681"; }
        ListElement{ radius: "70"; angle: "330"; value: "-54.3893"; }
        ListElement{ radius: "70"; angle: "335"; value: "-50.5202"; }
        ListElement{ radius: "70"; angle: "340"; value: "-46.4903"; }
        ListElement{ radius: "70"; angle: "345"; value: "-42.3302"; }
        ListElement{ radius: "70"; angle: "350"; value: "-38.0717"; }
        ListElement{ radius: "70"; angle: "355"; value: "-33.747"; }
        ListElement{ radius: "70"; angle: "360"; value: "-29.3893"; }
        ListElement{ radius: "75"; angle: "0"; value: "-35.3553"; }
        ListElement{ radius: "75"; angle: "5"; value: "-30.9976"; }
        ListElement{ radius: "75"; angle: "10"; value: "-26.6729"; }
        ListElement{ radius: "75"; angle: "15"; value: "-22.4144"; }
        ListElement{ radius: "75"; angle: "20"; value: "-18.2543"; }
        ListElement{ radius: "75"; angle: "25"; value: "-14.2244"; }
        ListElement{ radius: "75"; angle: "30"; value: "-10.3553"; }
        ListElement{ radius: "75"; angle: "35"; value: "-6.67652"; }
        ListElement{ radius: "75"; angle: "40"; value: "-3.21596"; }
        ListElement{ radius: "75"; angle: "45"; value: "5.55112e-15"; }
        ListElement{ radius: "75"; angle: "50"; value: "2.94688"; }
        ListElement{ radius: "75"; angle: "55"; value: "5.60226"; }
        ListElement{ radius: "75"; angle: "60"; value: "7.94593"; }
        ListElement{ radius: "75"; angle: "65"; value: "9.96005"; }
        ListElement{ radius: "75"; angle: "70"; value: "11.6293"; }
        ListElement{ radius: "75"; angle: "75"; value: "12.941"; }
        ListElement{ radius: "75"; angle: "80"; value: "13.885"; }
        ListElement{ radius: "75"; angle: "85"; value: "14.4544"; }
        ListElement{ radius: "75"; angle: "90"; value: "14.6447"; }
        ListElement{ radius: "75"; angle: "95"; value: "14.4544"; }
        ListElement{ radius: "75"; angle: "100"; value: "13.885"; }
        ListElement{ radius: "75"; angle: "105"; value: "12.941"; }
        ListElement{ radius: "75"; angle: "110"; value: "11.6293"; }
        ListElement{ radius: "75"; angle: "115"; value: "9.96005"; }
        ListElement{ radius: "75"; angle: "120"; value: "7.94593"; }
        ListElement{ radius: "75"; angle: "125"; value: "5.60226"; }
        ListElement{ radius: "75"; angle: "130"; value: "2.94688"; }
        ListElement{ radius: "75"; angle: "135"; value: "5.55112e-15"; }
        ListElement{ radius: "75"; angle: "140"; value: "-3.21596"; }
        ListElement{ radius: "75"; angle: "145"; value: "-6.67652"; }
        ListElement{ radius: "75"; angle: "150"; value: "-10.3553"; }
        ListElement{ radius: "75"; angle: "155"; value: "-14.2244"; }
        ListElement{ radius: "75"; angle: "160"; value: "-18.2543"; }
        ListElement{ radius: "75"; angle: "165"; value: "-22.4144"; }
        ListElement{ radius: "75"; angle: "170"; value: "-26.6729"; }
        ListElement{ radius: "75"; angle: "175"; value: "-30.9976"; }
        ListElement{ radius: "75"; angle: "180"; value: "-35.3553"; }
        ListElement{ radius: "75"; angle: "185"; value: "-39.7131"; }
        ListElement{ radius: "75"; angle: "190"; value: "-44.0377"; }
        ListElement{ radius: "75"; angle: "195"; value: "-48.2963"; }
        ListElement{ radius: "75"; angle: "200"; value: "-52.4563"; }
        ListElement{ radius: "75"; angle: "205"; value: "-56.4863"; }
        ListElement{ radius: "75"; angle: "210"; value: "-60.3553"; }
        ListElement{ radius: "75"; angle: "215"; value: "-64.0342"; }
        ListElement{ radius: "75"; angle: "220"; value: "-67.4947"; }
        ListElement{ radius: "75"; angle: "225"; value: "-70.7107"; }
        ListElement{ radius: "75"; angle: "230"; value: "-73.6576"; }
        ListElement{ radius: "75"; angle: "235"; value: "-76.3129"; }
        ListElement{ radius: "75"; angle: "240"; value: "-78.6566"; }
        ListElement{ radius: "75"; angle: "245"; value: "-80.6707"; }
        ListElement{ radius: "75"; angle: "250"; value: "-82.34"; }
        ListElement{ radius: "75"; angle: "255"; value: "-83.6516"; }
        ListElement{ radius: "75"; angle: "260"; value: "-84.5957"; }
        ListElement{ radius: "75"; angle: "265"; value: "-85.1651"; }
        ListElement{ radius: "75"; angle: "270"; value: "-85.3553"; }
        ListElement{ radius: "75"; angle: "275"; value: "-85.1651"; }
        ListElement{ radius: "75"; angle: "280"; value: "-84.5957"; }
        ListElement{ radius: "75"; angle: "285"; value: "-83.6516"; }
        ListElement{ radius: "75"; angle: "290"; value: "-82.34"; }
        ListElement{ radius: "75"; angle: "295"; value: "-80.6707"; }
        ListElement{ radius: "75"; angle: "300"; value: "-78.6566"; }
        ListElement{ radius: "75"; angle: "305"; value: "-76.3129"; }
        ListElement{ radius: "75"; angle: "310"; value: "-73.6576"; }
        ListElement{ radius: "75"; angle: "315"; value: "-70.7107"; }
        ListElement{ radius: "75"; angle: "320"; value: "-67.4947"; }
        ListElement{ radius: "75"; angle: "325"; value: "-64.0342"; }
        ListElement{ radius: "75"; angle: "330"; value: "-60.3553"; }
        ListElement{ radius: "75"; angle: "335"; value: "-56.4863"; }
        ListElement{ radius: "75"; angle: "340"; value: "-52.4563"; }
        ListElement{ radius: "75"; angle: "345"; value: "-48.2963"; }
        ListElement{ radius: "75"; angle: "350"; value: "-44.0377"; }
        ListElement{ radius: "75"; angle: "355"; value: "-39.7131"; }
        ListElement{ radius: "75"; angle: "360"; value: "-35.3553"; }
        ListElement{ radius: "80"; angle: "0"; value: "-40.4508"; }
        ListElement{ radius: "80"; angle: "5"; value: "-36.0931"; }
        ListElement{ radius: "80"; angle: "10"; value: "-31.7684"; }
        ListElement{ radius: "80"; angle: "15"; value: "-27.5099"; }
        ListElement{ radius: "80"; angle: "20"; value: "-23.3498"; }
        ListElement{ radius: "80"; angle: "25"; value: "-19.3199"; }
        ListElement{ radius: "80"; angle: "30"; value: "-15.4508"; }
        ListElement{ radius: "80"; angle: "35"; value: "-11.772"; }
        ListElement{ radius: "80"; angle: "40"; value: "-8.31147"; }
        ListElement{ radius: "80"; angle: "45"; value: "-5.09551"; }
        ListElement{ radius: "80"; angle: "50"; value: "-2.14863"; }
        ListElement{ radius: "80"; angle: "55"; value: "0.506752"; }
        ListElement{ radius: "80"; angle: "60"; value: "2.85042"; }
        ListElement{ radius: "80"; angle: "65"; value: "4.86454"; }
        ListElement{ radius: "80"; angle: "70"; value: "6.53378"; }
        ListElement{ radius: "80"; angle: "75"; value: "7.84544"; }
        ListElement{ radius: "80"; angle: "80"; value: "8.78954"; }
        ListElement{ radius: "80"; angle: "85"; value: "9.35889"; }
        ListElement{ radius: "80"; angle: "90"; value: "9.54915"; }
        ListElement{ radius: "80"; angle: "95"; value: "9.35889"; }
        ListElement{ radius: "80"; angle: "100"; value: "8.78954"; }
        ListElement{ radius: "80"; angle: "105"; value: "7.84544"; }
        ListElement{ radius: "80"; angle: "110"; value: "6.53378"; }
        ListElement{ radius: "80"; angle: "115"; value: "4.86454"; }
        ListElement{ radius: "80"; angle: "120"; value: "2.85042"; }
        ListElement{ radius: "80"; angle: "125"; value: "0.506752"; }
        ListElement{ radius: "80"; angle: "130"; value: "-2.14863"; }
        ListElement{ radius: "80"; angle: "135"; value: "-5.09551"; }
        ListElement{ radius: "80"; angle: "140"; value: "-8.31147"; }
        ListElement{ radius: "80"; angle: "145"; value: "-11.772"; }
        ListElement{ radius: "80"; angle: "150"; value: "-15.4508"; }
        ListElement{ radius: "80"; angle: "155"; value: "-19.3199"; }
        ListElement{ radius: "80"; angle: "160"; value: "-23.3498"; }
        ListElement{ radius: "80"; angle: "165"; value: "-27.5099"; }
        ListElement{ radius: "80"; angle: "170"; value: "-31.7684"; }
        ListElement{ radius: "80"; angle: "175"; value: "-36.0931"; }
        ListElement{ radius: "80"; angle: "180"; value: "-40.4508"; }
        ListElement{ radius: "80"; angle: "185"; value: "-44.8086"; }
        ListElement{ radius: "80"; angle: "190"; value: "-49.1333"; }
        ListElement{ radius: "80"; angle: "195"; value: "-53.3918"; }
        ListElement{ radius: "80"; angle: "200"; value: "-57.5519"; }
        ListElement{ radius: "80"; angle: "205"; value: "-61.5818"; }
        ListElement{ radius: "80"; angle: "210"; value: "-65.4508"; }
        ListElement{ radius: "80"; angle: "215"; value: "-69.1297"; }
        ListElement{ radius: "80"; angle: "220"; value: "-72.5902"; }
        ListElement{ radius: "80"; angle: "225"; value: "-75.8062"; }
        ListElement{ radius: "80"; angle: "230"; value: "-78.7531"; }
        ListElement{ radius: "80"; angle: "235"; value: "-81.4085"; }
        ListElement{ radius: "80"; angle: "240"; value: "-83.7521"; }
        ListElement{ radius: "80"; angle: "245"; value: "-85.7662"; }
        ListElement{ radius: "80"; angle: "250"; value: "-87.4355"; }
        ListElement{ radius: "80"; angle: "255"; value: "-88.7471"; }
        ListElement{ radius: "80"; angle: "260"; value: "-89.6912"; }
        ListElement{ radius: "80"; angle: "265"; value: "-90.2606"; }
        ListElement{ radius: "80"; angle: "270"; value: "-90.4508"; }
        ListElement{ radius: "80"; angle: "275"; value: "-90.2606"; }
        ListElement{ radius: "80"; angle: "280"; value: "-89.6912"; }
        ListElement{ radius: "80"; angle: "285"; value: "-88.7471"; }
        ListElement{ radius: "80"; angle: "290"; value: "-87.4355"; }
        ListElement{ radius: "80"; angle: "295"; value: "-85.7662"; }
        ListElement{ radius: "80"; angle: "300"; value: "-83.7521"; }
        ListElement{ radius: "80"; angle: "305"; value: "-81.4085"; }
        ListElement{ radius: "80"; angle: "310"; value: "-78.7531"; }
        ListElement{ radius: "80"; angle: "315"; value: "-75.8062"; }
        ListElement{ radius: "80"; angle: "320"; value: "-72.5902"; }
        ListElement{ radius: "80"; angle: "325"; value: "-69.1297"; }
        ListElement{ radius: "80"; angle: "330"; value: "-65.4508"; }
        ListElement{ radius: "80"; angle: "335"; value: "-61.5818"; }
        ListElement{ radius: "80"; angle: "340"; value: "-57.5519"; }
        ListElement{ radius: "80"; angle: "345"; value: "-53.3918"; }
        ListElement{ radius: "80"; angle: "350"; value: "-49.1333"; }
        ListElement{ radius: "80"; angle: "355"; value: "-44.8086"; }
        ListElement{ radius: "80"; angle: "360"; value: "-40.4508"; }
        ListElement{ radius: "85"; angle: "0"; value: "-44.5503"; }
        ListElement{ radius: "85"; angle: "5"; value: "-40.1925"; }
        ListElement{ radius: "85"; angle: "10"; value: "-35.8679"; }
        ListElement{ radius: "85"; angle: "15"; value: "-31.6094"; }
        ListElement{ radius: "85"; angle: "20"; value: "-27.4493"; }
        ListElement{ radius: "85"; angle: "25"; value: "-23.4194"; }
        ListElement{ radius: "85"; angle: "30"; value: "-19.5503"; }
        ListElement{ radius: "85"; angle: "35"; value: "-15.8715"; }
        ListElement{ radius: "85"; angle: "40"; value: "-12.4109"; }
        ListElement{ radius: "85"; angle: "45"; value: "-9.19499"; }
        ListElement{ radius: "85"; angle: "50"; value: "-6.2481"; }
        ListElement{ radius: "85"; angle: "55"; value: "-3.59272"; }
        ListElement{ radius: "85"; angle: "60"; value: "-1.24906"; }
        ListElement{ radius: "85"; angle: "65"; value: "0.765063"; }
        ListElement{ radius: "85"; angle: "70"; value: "2.4343"; }
        ListElement{ radius: "85"; angle: "75"; value: "3.74597"; }
        ListElement{ radius: "85"; angle: "80"; value: "4.69006"; }
        ListElement{ radius: "85"; angle: "85"; value: "5.25941"; }
        ListElement{ radius: "85"; angle: "90"; value: "5.44967"; }
        ListElement{ radius: "85"; angle: "95"; value: "5.25941"; }
        ListElement{ radius: "85"; angle: "100"; value: "4.69006"; }
        ListElement{ radius: "85"; angle: "105"; value: "3.74597"; }
        ListElement{ radius: "85"; angle: "110"; value: "2.4343"; }
        ListElement{ radius: "85"; angle: "115"; value: "0.765063"; }
        ListElement{ radius: "85"; angle: "120"; value: "-1.24906"; }
        ListElement{ radius: "85"; angle: "125"; value: "-3.59272"; }
        ListElement{ radius: "85"; angle: "130"; value: "-6.2481"; }
        ListElement{ radius: "85"; angle: "135"; value: "-9.19499"; }
        ListElement{ radius: "85"; angle: "140"; value: "-12.4109"; }
        ListElement{ radius: "85"; angle: "145"; value: "-15.8715"; }
        ListElement{ radius: "85"; angle: "150"; value: "-19.5503"; }
        ListElement{ radius: "85"; angle: "155"; value: "-23.4194"; }
        ListElement{ radius: "85"; angle: "160"; value: "-27.4493"; }
        ListElement{ radius: "85"; angle: "165"; value: "-31.6094"; }
        ListElement{ radius: "85"; angle: "170"; value: "-35.8679"; }
        ListElement{ radius: "85"; angle: "175"; value: "-40.1925"; }
        ListElement{ radius: "85"; angle: "180"; value: "-44.5503"; }
        ListElement{ radius: "85"; angle: "185"; value: "-48.9081"; }
        ListElement{ radius: "85"; angle: "190"; value: "-53.2327"; }
        ListElement{ radius: "85"; angle: "195"; value: "-57.4913"; }
        ListElement{ radius: "85"; angle: "200"; value: "-61.6513"; }
        ListElement{ radius: "85"; angle: "205"; value: "-65.6812"; }
        ListElement{ radius: "85"; angle: "210"; value: "-69.5503"; }
        ListElement{ radius: "85"; angle: "215"; value: "-73.2291"; }
        ListElement{ radius: "85"; angle: "220"; value: "-76.6897"; }
        ListElement{ radius: "85"; angle: "225"; value: "-79.9057"; }
        ListElement{ radius: "85"; angle: "230"; value: "-82.8525"; }
        ListElement{ radius: "85"; angle: "235"; value: "-85.5079"; }
        ListElement{ radius: "85"; angle: "240"; value: "-87.8516"; }
        ListElement{ radius: "85"; angle: "245"; value: "-89.8657"; }
        ListElement{ radius: "85"; angle: "250"; value: "-91.535"; }
        ListElement{ radius: "85"; angle: "255"; value: "-92.8466"; }
        ListElement{ radius: "85"; angle: "260"; value: "-93.7907"; }
        ListElement{ radius: "85"; angle: "265"; value: "-94.3601"; }
        ListElement{ radius: "85"; angle: "270"; value: "-94.5503"; }
        ListElement{ radius: "85"; angle: "275"; value: "-94.3601"; }
        ListElement{ radius: "85"; angle: "280"; value: "-93.7907"; }
        ListElement{ radius: "85"; angle: "285"; value: "-92.8466"; }
        ListElement{ radius: "85"; angle: "290"; value: "-91.535"; }
        ListElement{ radius: "85"; angle: "295"; value: "-89.8657"; }
        ListElement{ radius: "85"; angle: "300"; value: "-87.8516"; }
        ListElement{ radius: "85"; angle: "305"; value: "-85.5079"; }
        ListElement{ radius: "85"; angle: "310"; value: "-82.8525"; }
        ListElement{ radius: "85"; angle: "315"; value: "-79.9057"; }
        ListElement{ radius: "85"; angle: "320"; value: "-76.6897"; }
        ListElement{ radius: "85"; angle: "325"; value: "-73.2291"; }
        ListElement{ radius: "85"; angle: "330"; value: "-69.5503"; }
        ListElement{ radius: "85"; angle: "335"; value: "-65.6812"; }
        ListElement{ radius: "85"; angle: "340"; value: "-61.6513"; }
        ListElement{ radius: "85"; angle: "345"; value: "-57.4913"; }
        ListElement{ radius: "85"; angle: "350"; value: "-53.2327"; }
        ListElement{ radius: "85"; angle: "355"; value: "-48.9081"; }
        ListElement{ radius: "85"; angle: "360"; value: "-44.5503"; }
        ListElement{ radius: "90"; angle: "0"; value: "-47.5528"; }
        ListElement{ radius: "90"; angle: "5"; value: "-43.195"; }
        ListElement{ radius: "90"; angle: "10"; value: "-38.8704"; }
        ListElement{ radius: "90"; angle: "15"; value: "-34.6119"; }
        ListElement{ radius: "90"; angle: "20"; value: "-30.4518"; }
        ListElement{ radius: "90"; angle: "25"; value: "-26.4219"; }
        ListElement{ radius: "90"; angle: "30"; value: "-22.5528"; }
        ListElement{ radius: "90"; angle: "35"; value: "-18.874"; }
        ListElement{ radius: "90"; angle: "40"; value: "-15.4134"; }
        ListElement{ radius: "90"; angle: "45"; value: "-12.1975"; }
        ListElement{ radius: "90"; angle: "50"; value: "-9.2506"; }
        ListElement{ radius: "90"; angle: "55"; value: "-6.59522"; }
        ListElement{ radius: "90"; angle: "60"; value: "-4.25156"; }
        ListElement{ radius: "90"; angle: "65"; value: "-2.23744"; }
        ListElement{ radius: "90"; angle: "70"; value: "-0.568195"; }
        ListElement{ radius: "90"; angle: "75"; value: "0.743465"; }
        ListElement{ radius: "90"; angle: "80"; value: "1.68756"; }
        ListElement{ radius: "90"; angle: "85"; value: "2.25691"; }
        ListElement{ radius: "90"; angle: "90"; value: "2.44717"; }
        ListElement{ radius: "90"; angle: "95"; value: "2.25691"; }
        ListElement{ radius: "90"; angle: "100"; value: "1.68756"; }
        ListElement{ radius: "90"; angle: "105"; value: "0.743465"; }
        ListElement{ radius: "90"; angle: "110"; value: "-0.568195"; }
        ListElement{ radius: "90"; angle: "115"; value: "-2.23744"; }
        ListElement{ radius: "90"; angle: "120"; value: "-4.25156"; }
        ListElement{ radius: "90"; angle: "125"; value: "-6.59522"; }
        ListElement{ radius: "90"; angle: "130"; value: "-9.2506"; }
        ListElement{ radius: "90"; angle: "135"; value: "-12.1975"; }
        ListElement{ radius: "90"; angle: "140"; value: "-15.4134"; }
        ListElement{ radius: "90"; angle: "145"; value: "-18.874"; }
        ListElement{ radius: "90"; angle: "150"; value: "-22.5528"; }
        ListElement{ radius: "90"; angle: "155"; value: "-26.4219"; }
        ListElement{ radius: "90"; angle: "160"; value: "-30.4518"; }
        ListElement{ radius: "90"; angle: "165"; value: "-34.6119"; }
        ListElement{ radius: "90"; angle: "170"; value: "-38.8704"; }
        ListElement{ radius: "90"; angle: "175"; value: "-43.195"; }
        ListElement{ radius: "90"; angle: "180"; value: "-47.5528"; }
        ListElement{ radius: "90"; angle: "185"; value: "-51.9106"; }
        ListElement{ radius: "90"; angle: "190"; value: "-56.2352"; }
        ListElement{ radius: "90"; angle: "195"; value: "-60.4938"; }
        ListElement{ radius: "90"; angle: "200"; value: "-64.6538"; }
        ListElement{ radius: "90"; angle: "205"; value: "-68.6837"; }
        ListElement{ radius: "90"; angle: "210"; value: "-72.5528"; }
        ListElement{ radius: "90"; angle: "215"; value: "-76.2316"; }
        ListElement{ radius: "90"; angle: "220"; value: "-79.6922"; }
        ListElement{ radius: "90"; angle: "225"; value: "-82.9082"; }
        ListElement{ radius: "90"; angle: "230"; value: "-85.855"; }
        ListElement{ radius: "90"; angle: "235"; value: "-88.5104"; }
        ListElement{ radius: "90"; angle: "240"; value: "-90.8541"; }
        ListElement{ radius: "90"; angle: "245"; value: "-92.8682"; }
        ListElement{ radius: "90"; angle: "250"; value: "-94.5375"; }
        ListElement{ radius: "90"; angle: "255"; value: "-95.8491"; }
        ListElement{ radius: "90"; angle: "260"; value: "-96.7932"; }
        ListElement{ radius: "90"; angle: "265"; value: "-97.3626"; }
        ListElement{ radius: "90"; angle: "270"; value: "-97.5528"; }
        ListElement{ radius: "90"; angle: "275"; value: "-97.3626"; }
        ListElement{ radius: "90"; angle: "280"; value: "-96.7932"; }
        ListElement{ radius: "90"; angle: "285"; value: "-95.8491"; }
        ListElement{ radius: "90"; angle: "290"; value: "-94.5375"; }
        ListElement{ radius: "90"; angle: "295"; value: "-92.8682"; }
        ListElement{ radius: "90"; angle: "300"; value: "-90.8541"; }
        ListElement{ radius: "90"; angle: "305"; value: "-88.5104"; }
        ListElement{ radius: "90"; angle: "310"; value: "-85.855"; }
        ListElement{ radius: "90"; angle: "315"; value: "-82.9082"; }
        ListElement{ radius: "90"; angle: "320"; value: "-79.6922"; }
        ListElement{ radius: "90"; angle: "325"; value: "-76.2316"; }
        ListElement{ radius: "90"; angle: "330"; value: "-72.5528"; }
        ListElement{ radius: "90"; angle: "335"; value: "-68.6837"; }
        ListElement{ radius: "90"; angle: "340"; value: "-64.6538"; }
        ListElement{ radius: "90"; angle: "345"; value: "-60.4938"; }
        ListElement{ radius: "90"; angle: "350"; value: "-56.2352"; }
        ListElement{ radius: "90"; angle: "355"; value: "-51.9106"; }
        ListElement{ radius: "90"; angle: "360"; value: "-47.5528"; }
        ListElement{ radius: "95"; angle: "0"; value: "-49.3844"; }
        ListElement{ radius: "95"; angle: "5"; value: "-45.0266"; }
        ListElement{ radius: "95"; angle: "10"; value: "-40.702"; }
        ListElement{ radius: "95"; angle: "15"; value: "-36.4435"; }
        ListElement{ radius: "95"; angle: "20"; value: "-32.2834"; }
        ListElement{ radius: "95"; angle: "25"; value: "-28.2535"; }
        ListElement{ radius: "95"; angle: "30"; value: "-24.3844"; }
        ListElement{ radius: "95"; angle: "35"; value: "-20.7056"; }
        ListElement{ radius: "95"; angle: "40"; value: "-17.245"; }
        ListElement{ radius: "95"; angle: "45"; value: "-14.0291"; }
        ListElement{ radius: "95"; angle: "50"; value: "-11.0822"; }
        ListElement{ radius: "95"; angle: "55"; value: "-8.42681"; }
        ListElement{ radius: "95"; angle: "60"; value: "-6.08315"; }
        ListElement{ radius: "95"; angle: "65"; value: "-4.06903"; }
        ListElement{ radius: "95"; angle: "70"; value: "-2.39979"; }
        ListElement{ radius: "95"; angle: "75"; value: "-1.08813"; }
        ListElement{ radius: "95"; angle: "80"; value: "-0.144029"; }
        ListElement{ radius: "95"; angle: "85"; value: "0.425318"; }
        ListElement{ radius: "95"; angle: "90"; value: "0.615583"; }
        ListElement{ radius: "95"; angle: "95"; value: "0.425318"; }
        ListElement{ radius: "95"; angle: "100"; value: "-0.144029"; }
        ListElement{ radius: "95"; angle: "105"; value: "-1.08813"; }
        ListElement{ radius: "95"; angle: "110"; value: "-2.39979"; }
        ListElement{ radius: "95"; angle: "115"; value: "-4.06903"; }
        ListElement{ radius: "95"; angle: "120"; value: "-6.08315"; }
        ListElement{ radius: "95"; angle: "125"; value: "-8.42681"; }
        ListElement{ radius: "95"; angle: "130"; value: "-11.0822"; }
        ListElement{ radius: "95"; angle: "135"; value: "-14.0291"; }
        ListElement{ radius: "95"; angle: "140"; value: "-17.245"; }
        ListElement{ radius: "95"; angle: "145"; value: "-20.7056"; }
        ListElement{ radius: "95"; angle: "150"; value: "-24.3844"; }
        ListElement{ radius: "95"; angle: "155"; value: "-28.2535"; }
        ListElement{ radius: "95"; angle: "160"; value: "-32.2834"; }
        ListElement{ radius: "95"; angle: "165"; value: "-36.4435"; }
        ListElement{ radius: "95"; angle: "170"; value: "-40.702"; }
        ListElement{ radius: "95"; angle: "175"; value: "-45.0266"; }
        ListElement{ radius: "95"; angle: "180"; value: "-49.3844"; }
        ListElement{ radius: "95"; angle: "185"; value: "-53.7422"; }
        ListElement{ radius: "95"; angle: "190"; value: "-58.0668"; }
        ListElement{ radius: "95"; angle: "195"; value: "-62.3254"; }
        ListElement{ radius: "95"; angle: "200"; value: "-66.4854"; }
        ListElement{ radius: "95"; angle: "205"; value: "-70.5153"; }
        ListElement{ radius: "95"; angle: "210"; value: "-74.3844"; }
        ListElement{ radius: "95"; angle: "215"; value: "-78.0632"; }
        ListElement{ radius: "95"; angle: "220"; value: "-81.5238"; }
        ListElement{ radius: "95"; angle: "225"; value: "-84.7398"; }
        ListElement{ radius: "95"; angle: "230"; value: "-87.6866"; }
        ListElement{ radius: "95"; angle: "235"; value: "-90.342"; }
        ListElement{ radius: "95"; angle: "240"; value: "-92.6857"; }
        ListElement{ radius: "95"; angle: "245"; value: "-94.6998"; }
        ListElement{ radius: "95"; angle: "250"; value: "-96.369"; }
        ListElement{ radius: "95"; angle: "255"; value: "-97.6807"; }
        ListElement{ radius: "95"; angle: "260"; value: "-98.6248"; }
        ListElement{ radius: "95"; angle: "265"; value: "-99.1942"; }
        ListElement{ radius: "95"; angle: "270"; value: "-99.3844"; }
        ListElement{ radius: "95"; angle: "275"; value: "-99.1942"; }
        ListElement{ radius: "95"; angle: "280"; value: "-98.6248"; }
        ListElement{ radius: "95"; angle: "285"; value: "-97.6807"; }
        ListElement{ radius: "95"; angle: "290"; value: "-96.369"; }
        ListElement{ radius: "95"; angle: "295"; value: "-94.6998"; }
        ListElement{ radius: "95"; angle: "300"; value: "-92.6857"; }
        ListElement{ radius: "95"; angle: "305"; value: "-90.342"; }
        ListElement{ radius: "95"; angle: "310"; value: "-87.6866"; }
        ListElement{ radius: "95"; angle: "315"; value: "-84.7398"; }
        ListElement{ radius: "95"; angle: "320"; value: "-81.5238"; }
        ListElement{ radius: "95"; angle: "325"; value: "-78.0632"; }
        ListElement{ radius: "95"; angle: "330"; value: "-74.3844"; }
        ListElement{ radius: "95"; angle: "335"; value: "-70.5153"; }
        ListElement{ radius: "95"; angle: "340"; value: "-66.4854"; }
        ListElement{ radius: "95"; angle: "345"; value: "-62.3254"; }
        ListElement{ radius: "95"; angle: "350"; value: "-58.0668"; }
        ListElement{ radius: "95"; angle: "355"; value: "-53.7422"; }
        ListElement{ radius: "95"; angle: "360"; value: "-49.3844"; }
        ListElement{ radius: "100"; angle: "0"; value: "-50"; }
        ListElement{ radius: "100"; angle: "5"; value: "-45.6422"; }
        ListElement{ radius: "100"; angle: "10"; value: "-41.3176"; }
        ListElement{ radius: "100"; angle: "15"; value: "-37.059"; }
        ListElement{ radius: "100"; angle: "20"; value: "-32.899"; }
        ListElement{ radius: "100"; angle: "25"; value: "-28.8691"; }
        ListElement{ radius: "100"; angle: "30"; value: "-25"; }
        ListElement{ radius: "100"; angle: "35"; value: "-21.3212"; }
        ListElement{ radius: "100"; angle: "40"; value: "-17.8606"; }
        ListElement{ radius: "100"; angle: "45"; value: "-14.6447"; }
        ListElement{ radius: "100"; angle: "50"; value: "-11.6978"; }
        ListElement{ radius: "100"; angle: "55"; value: "-9.0424"; }
        ListElement{ radius: "100"; angle: "60"; value: "-6.69873"; }
        ListElement{ radius: "100"; angle: "65"; value: "-4.68461"; }
        ListElement{ radius: "100"; angle: "70"; value: "-3.01537"; }
        ListElement{ radius: "100"; angle: "75"; value: "-1.70371"; }
        ListElement{ radius: "100"; angle: "80"; value: "-0.759612"; }
        ListElement{ radius: "100"; angle: "85"; value: "-0.190265"; }
        ListElement{ radius: "100"; angle: "90"; value: "0"; }
        ListElement{ radius: "100"; angle: "95"; value: "-0.190265"; }
        ListElement{ radius: "100"; angle: "100"; value: "-0.759612"; }
        ListElement{ radius: "100"; angle: "105"; value: "-1.70371"; }
        ListElement{ radius: "100"; angle: "110"; value: "-3.01537"; }
        ListElement{ radius: "100"; angle: "115"; value: "-4.68461"; }
        ListElement{ radius: "100"; angle: "120"; value: "-6.69873"; }
        ListElement{ radius: "100"; angle: "125"; value: "-9.0424"; }
        ListElement{ radius: "100"; angle: "130"; value: "-11.6978"; }
        ListElement{ radius: "100"; angle: "135"; value: "-14.6447"; }
        ListElement{ radius: "100"; angle: "140"; value: "-17.8606"; }
        ListElement{ radius: "100"; angle: "145"; value: "-21.3212"; }
        ListElement{ radius: "100"; angle: "150"; value: "-25"; }
        ListElement{ radius: "100"; angle: "155"; value: "-28.8691"; }
        ListElement{ radius: "100"; angle: "160"; value: "-32.899"; }
        ListElement{ radius: "100"; angle: "165"; value: "-37.059"; }
        ListElement{ radius: "100"; angle: "170"; value: "-41.3176"; }
        ListElement{ radius: "100"; angle: "175"; value: "-45.6422"; }
        ListElement{ radius: "100"; angle: "180"; value: "-50"; }
        ListElement{ radius: "100"; angle: "185"; value: "-54.3578"; }
        ListElement{ radius: "100"; angle: "190"; value: "-58.6824"; }
        ListElement{ radius: "100"; angle: "195"; value: "-62.941"; }
        ListElement{ radius: "100"; angle: "200"; value: "-67.101"; }
        ListElement{ radius: "100"; angle: "205"; value: "-71.1309"; }
        ListElement{ radius: "100"; angle: "210"; value: "-75"; }
        ListElement{ radius: "100"; angle: "215"; value: "-78.6788"; }
        ListElement{ radius: "100"; angle: "220"; value: "-82.1394"; }
        ListElement{ radius: "100"; angle: "225"; value: "-85.3553"; }
        ListElement{ radius: "100"; angle: "230"; value: "-88.3022"; }
        ListElement{ radius: "100"; angle: "235"; value: "-90.9576"; }
        ListElement{ radius: "100"; angle: "240"; value: "-93.3013"; }
        ListElement{ radius: "100"; angle: "245"; value: "-95.3154"; }
        ListElement{ radius: "100"; angle: "250"; value: "-96.9846"; }
        ListElement{ radius: "100"; angle: "255"; value: "-98.2963"; }
        ListElement{ radius: "100"; angle: "260"; value: "-99.2404"; }
        ListElement{ radius: "100"; angle: "265"; value: "-99.8097"; }
        ListElement{ radius: "100"; angle: "270"; value: "-100"; }
        ListElement{ radius: "100"; angle: "275"; value: "-99.8097"; }
        ListElement{ radius: "100"; angle: "280"; value: "-99.2404"; }
        ListElement{ radius: "100"; angle: "285"; value: "-98.2963"; }
        ListElement{ radius: "100"; angle: "290"; value: "-96.9846"; }
        ListElement{ radius: "100"; angle: "295"; value: "-95.3154"; }
        ListElement{ radius: "100"; angle: "300"; value: "-93.3013"; }
        ListElement{ radius: "100"; angle: "305"; value: "-90.9576"; }
        ListElement{ radius: "100"; angle: "310"; value: "-88.3022"; }
        ListElement{ radius: "100"; angle: "315"; value: "-85.3553"; }
        ListElement{ radius: "100"; angle: "320"; value: "-82.1394"; }
        ListElement{ radius: "100"; angle: "325"; value: "-78.6788"; }
        ListElement{ radius: "100"; angle: "330"; value: "-75"; }
        ListElement{ radius: "100"; angle: "335"; value: "-71.1309"; }
        ListElement{ radius: "100"; angle: "340"; value: "-67.101"; }
        ListElement{ radius: "100"; angle: "345"; value: "-62.941"; }
        ListElement{ radius: "100"; angle: "350"; value: "-58.6824"; }
        ListElement{ radius: "100"; angle: "355"; value: "-54.3578"; }
        ListElement{ radius: "100"; angle: "360"; value: "-50"; }
    }
}
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause

import QtQuick
import QtQuick.Controls
import QtDataVisualization

Rectangle {
    id: heightMapView
    color: surfacePlot.theme.windowColor

    required property bool portraitMode

    property real buttonWidth: heightMapView.portraitMode ? (heightMapView.width - 35) / 2
                                                          : (heightMapView.width - 40) / 3

    Item {
        id: surfaceView
        anchors.top: buttons.bottom
        anchors.bottom: heightMapView.bottom
        anchors.left: heightMapView.left
        anchors.right: heightMapView.right

        //! [1]
        ColorGradient {
            id: surfaceGradient
            ColorGradientStop { position: 0.0; color: "darkgreen"}
            ColorGradientStop { position: 0.15; color: "darkslategray" }
            ColorGradientStop { position: 0.7; color: "peru" }
            ColorGradientStop { position: 1.0; color: "white" }
        }
        //! [1]

        Surface3D {
            id: surfacePlot
            width: surfaceView.width
            height: surfaceView.height
            aspectRatio: 3.0
            //! [2]
            theme: Theme3D {
                type: Theme3D.ThemeStoneMoss
                font.family: "STCaiyun"
                font.pointSize: 35
                colorStyle: Theme3D.ColorStyleRangeGradient
                baseGradients: [surfaceGradient] // Use the custom gradient
            }
            //! [2]
            shadowQuality: AbstractGraph3D.ShadowQualityMedium
            selectionMode: AbstractGraph3D.SelectionSlice | AbstractGraph3D.SelectionItemAndRow
            scene.activeCamera.cameraPreset: Camera3D.CameraPresetIsometricLeft
            axisX.segmentCount: 3
            axisX.subSegmentCount: 3
            axisX.labelFormat: "%i"
            axisZ.segmentCount: 3
            axisZ.subSegmentCount: 3
            axisZ.labelFormat: "%i"
            axisY.segmentCount: 2
            axisY.subSegmentCount: 2
            axisY.labelFormat: "%i"
            axisY.title: "Height (m)"
            axisX.title: "Longitude 175.x\"E"
            axisZ.title: "Latitude -39.x\"N"
            axisY.titleVisible: true
            axisX.titleVisible: true
            axisZ.titleVisible: true

            //! [0]
            Surface3DSeries {
                id: heightSeries
                flatShadingEnabled: false
                drawMode: Surface3DSeries.DrawSurface

                HeightMapSurfaceDataProxy {
                    heightMapFile: ":/qml/qmlsurfacegallery/heightmap.png"
                    // We don't want the default data values set by heightmap proxy, but use
                    // actual coordinate and height values instead
                    autoScaleY: true
                    minYValue: 740
                    maxYValue: 2787
                    minZValue: -374 // ~ -39.374411"N
                    maxZValue: -116 // ~ -39.115971"N
                    minXValue: 472  // ~ 175.471767"E
                    maxXValue: 781  // ~ 175.780758"E
                }

                onDrawModeChanged: heightMapView.checkState()
            }
            //! [0]
        }
    }

    Item {
        id: buttons
        anchors.top: parent.top
        anchors.left: parent.left
        anchors.right: parent.right
        anchors.margins: 10
        height: heightMapView.portraitMode ? surfaceGridToggle.implicitHeight * 3 + 20
                                           : surfaceGridToggle.implicitHeight * 2 + 15
        opacity: 0.5

        Button {
            id: surfaceGridToggle
            anchors.margins: 5
            anchors.left: parent.left
            anchors.top: parent.top
            width: heightMapView.buttonWidth // Calculated elsewhere based on screen orientation
            text: "Show Surface\nGrid"
            //! [3]
            onClicked: {
                if (heightSeries.drawMode & Surface3DSeries.DrawWireframe)
                    heightSeries.drawMode &= ~Surface3DSeries.DrawWireframe;
                else
                    heightSeries.drawMode |= Surface3DSeries.DrawWireframe;
            }
            //! [3]
        }

        Button {
            id: surfaceGridColor
            anchors.margins: 5
            anchors.left: surfaceGridToggle.right
            anchors.top: parent.top
            width: heightMapView.buttonWidth
            text: "Red surface\ngrid color"
            //! [4]
            onClicked: {
                if (Qt.colorEqual(heightSeries.wireframeColor, "#000000")) {
                    heightSeries.wireframeColor = "red";
                    text = "Black surface\ngrid color";
                } else {
                    heightSeries.wireframeColor = "black";
                    text = "Red surface\ngrid color";
                }
            }
            //! [4]
        }

        Button {
            id: surfaceToggle
            anchors.margins: 5
            anchors.left: heightMapView.portraitMode ? parent.left : surfaceGridColor.right
            anchors.top: heightMapView.portraitMode ? surfaceGridColor.bottom : parent.top
            width: heightMapView.buttonWidth
            text: "Hide\nSurface"
            //! [5]
            onClicked: {
                if (heightSeries.drawMode & Surface3DSeries.DrawSurface)
                    heightSeries.drawMode &= ~Surface3DSeries.DrawSurface;
                else
                    heightSeries.drawMode |= Surface3DSeries.DrawSurface;
            }
            //! [5]
        }

        Button {
            id: flatShadingToggle
            anchors.margins: 5
            anchors.left: heightMapView.portraitMode ? surfaceToggle.right : parent.left
            anchors.top: heightMapView.portraitMode ? surfaceGridColor.bottom : surfaceToggle.bottom
            width: heightMapView.buttonWidth
            text: heightSeries.flatShadingSupported ? "Show\nFlat" : "Flat not\nsupported"
            enabled: heightSeries.flatShadingSupported
            //! [6]
            onClicked: {
                if (heightSeries.flatShadingEnabled) {
                    heightSeries.flatShadingEnabled = false;
                    text = "Show\nFlat"
                } else {
                    heightSeries.flatShadingEnabled = true;
                    text = "Show\nSmooth"
                }
            }
            //! [6]
        }

        Button {
            id: backgroundToggle
            anchors.margins: 5
            anchors.left: heightMapView.portraitMode ? parent.left : flatShadingToggle.right
            anchors.top: heightMapView.portraitMode ? flatShadingToggle.bottom
                                                    : surfaceToggle.bottom
            width: heightMapView.buttonWidth
            text: "Hide\nBackground"
            onClicked: {
                if (surfacePlot.theme.backgroundEnabled) {
                    surfacePlot.theme.backgroundEnabled = false;
                    text = "Show\nBackground";
                } else {
                    surfacePlot.theme.backgroundEnabled = true;
                    text = "Hide\nBackground";
                }
            }
        }

        Button {
            id: gridToggle
            anchors.margins: 5
            anchors.left: backgroundToggle.right
            anchors.top: heightMapView.portraitMode ? flatShadingToggle.bottom
                                                    : surfaceToggle.bottom
            width: heightMapView.buttonWidth
            text: "Hide\nGrid"
            onClicked: {
                if (surfacePlot.theme.gridEnabled) {
                    surfacePlot.theme.gridEnabled = false;
                    text = "Show\nGrid";
                } else {
                    surfacePlot.theme.gridEnabled = true;
                    text = "Hide\nGrid";
                }
            }
        }
    }

    function checkState() {
        if (heightSeries.drawMode & Surface3DSeries.DrawSurface)
            surfaceToggle.text = "Hide\nSurface";
        else
            surfaceToggle.text = "Show\nSurface";

        if (heightSeries.drawMode & Surface3DSeries.DrawWireframe)
            surfaceGridToggle.text = "Hide Surface\nGrid";
        else
            surfaceGridToggle.text = "Show Surface\nGrid";
    }
}
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause

import QtQuick
import QtQuick.Controls
import QtDataVisualization
//! [0]
import SurfaceGallery
//! [0]

Item {
    id: oscilloscopeView

    property int sampleColumns: sampleSlider.value
    property int sampleRows: sampleColumns / 2
    property int sampleCache: 24

    required property bool portraitMode

    property real controlWidth: oscilloscopeView.portraitMode ? oscilloscopeView.width - 10
                                                              : oscilloscopeView.width / 4 - 6.66

    property real buttonWidth: oscilloscopeView.portraitMode ? oscilloscopeView.width - 10
                                                             : oscilloscopeView.width / 3 - 7.5

    onSampleRowsChanged: {
        surfaceSeries.selectedPoint = surfaceSeries.invalidSelectionPosition
        generateData()
    }

    //![1]
    DataSource {
        id: dataSource
    }
    //![1]

    Item {
        id: dataView
        anchors.bottom: parent.bottom
        width: parent.width
        height: parent.height - controlArea.height

        //! [2]
        Surface3D {
            id: surfaceGraph
            anchors.fill: parent

            Surface3DSeries {
                id: surfaceSeries
                drawMode: Surface3DSeries.DrawSurfaceAndWireframe
                itemLabelFormat: "@xLabel, @zLabel: @yLabel"
                //! [2]
                //! [3]
                itemLabelVisible: false
                //! [3]

                //! [4]
                onItemLabelChanged: {
                    if (surfaceSeries.selectedPoint == surfaceSeries.invalidSelectionPosition)
                        selectionText.text = "No selection";
                    else
                        selectionText.text = surfaceSeries.itemLabel;
                }
                //! [4]
            }

            shadowQuality: AbstractGraph3D.ShadowQualityNone
            selectionMode: AbstractGraph3D.SelectionSlice | AbstractGraph3D.SelectionItemAndColumn
            theme: Theme3D {
                type: Theme3D.ThemeIsabelle
                backgroundEnabled: false
            }
            scene.activeCamera.cameraPreset: Camera3D.CameraPresetFrontHigh

            axisX.labelFormat: "%d ms"
            axisY.labelFormat: "%d W"
            axisZ.labelFormat: "%d mV"
            axisX.min: 0
            axisY.min: 0
            axisZ.min: 0
            axisX.max: 1000
            axisY.max: 100
            axisZ.max: 800
            axisX.segmentCount: 4
            axisY.segmentCount: 4
            axisZ.segmentCount: 4
            measureFps: true
            renderingMode: AbstractGraph3D.RenderDirectToBackground

            onCurrentFpsChanged: (fps)=> {
                                     if (fps > 10)
                                     fpsText.text = "FPS: " + Math.round(surfaceGraph.currentFps);
                                     else
                                     fpsText.text = "FPS: " + Math.round(surfaceGraph.currentFps * 10.0) / 10.0;
                                 }

            //! [5]
            Component.onCompleted: oscilloscopeView.generateData();
            //! [5]
        }
    }

    //! [7]
    Timer {
        id: refreshTimer
        interval: 1000 / frequencySlider.value
        running: true
        repeat: true
        onTriggered: dataSource.update(surfaceSeries);
    }
    //! [7]

    Rectangle {
        id: controlArea
        height: oscilloscopeView.portraitMode ? flatShadingToggle.implicitHeight * 7
                                              : flatShadingToggle.implicitHeight * 2
        anchors.left: parent.left
        anchors.top: parent.top
        anchors.right: parent.right
        color: surfaceGraph.theme.backgroundColor

        // Samples
        Rectangle {
            id: samples
            width: oscilloscopeView.controlWidth
            height: flatShadingToggle.implicitHeight
            anchors.left: parent.left
            anchors.top: parent.top
            anchors.margins: 5

            color: surfaceGraph.theme.windowColor
            border.color: surfaceGraph.theme.gridLineColor
            border.width: 1
            radius: 4

            Row {
                anchors.centerIn: parent
                spacing: 10
                padding: 5

                Slider {
                    id: sampleSlider
                    from: oscilloscopeView.sampleCache * 2
                    to: from * 10
                    stepSize: oscilloscopeView.sampleCache

                    background: Rectangle {
                        x: sampleSlider.leftPadding
                        y: sampleSlider.topPadding + sampleSlider.availableHeight / 2
                           - height / 2
                        implicitWidth: 200
                        implicitHeight: 4
                        width: sampleSlider.availableWidth
                        height: implicitHeight
                        radius: 2
                        color: surfaceGraph.theme.gridLineColor

                        Rectangle {
                            width: sampleSlider.visualPosition * parent.width
                            height: parent.height
                            color: surfaceGraph.theme.labelTextColor
                            radius: 2
                        }
                    }

                    handle: Rectangle {
                        x: sampleSlider.leftPadding + sampleSlider.visualPosition
                           * (sampleSlider.availableWidth - width)
                        y: sampleSlider.topPadding + sampleSlider.availableHeight / 2
                           - height / 2
                        implicitWidth: 20
                        implicitHeight: 20
                        radius: 10
                        color: sampleSlider.pressed ? surfaceGraph.theme.gridLineColor
                                                    : surfaceGraph.theme.windowColor
                        border.color: sampleSlider.pressed ? surfaceGraph.theme.labelTextColor
                                                           : surfaceGraph.theme.gridLineColor
                    }

                    Component.onCompleted: value = from;
                }

                Text {
                    id: samplesText
                    text: "Samples: " + (oscilloscopeView.sampleRows * oscilloscopeView.sampleColumns)
                    verticalAlignment: Text.AlignVCenter
                    horizontalAlignment: Text.AlignHCenter
                    color: surfaceGraph.theme.labelTextColor
                }
            }
        }

        // Frequency
        Rectangle {
            id: frequency
            width: oscilloscopeView.controlWidth
            height: flatShadingToggle.implicitHeight
            anchors.left: oscilloscopeView.portraitMode ? parent.left : samples.right
            anchors.top: oscilloscopeView.portraitMode ? samples.bottom : parent.top
            anchors.margins: 5

            color: surfaceGraph.theme.windowColor
            border.color: surfaceGraph.theme.gridLineColor
            border.width: 1
            radius: 4

            Row {
                anchors.centerIn: parent
                spacing: 10
                padding: 5

                Slider {
                    id: frequencySlider
                    from: 2
                    to: 60
                    stepSize: 2
                    value: 30

                    background: Rectangle {
                        x: frequencySlider.leftPadding
                        y: frequencySlider.topPadding + frequencySlider.availableHeight / 2
                           - height / 2
                        implicitWidth: 200
                        implicitHeight: 4
                        width: frequencySlider.availableWidth
                        height: implicitHeight
                        radius: 2
                        color: surfaceGraph.theme.gridLineColor

                        Rectangle {
                            width: frequencySlider.visualPosition * parent.width
                            height: parent.height
                            color: surfaceGraph.theme.labelTextColor
                            radius: 2
                        }
                    }

                    handle: Rectangle {
                        x: frequencySlider.leftPadding + frequencySlider.visualPosition
                           * (frequencySlider.availableWidth - width)
                        y: frequencySlider.topPadding + frequencySlider.availableHeight / 2
                           - height / 2
                        implicitWidth: 20
                        implicitHeight: 20
                        radius: 10
                        color: frequencySlider.pressed ? surfaceGraph.theme.gridLineColor
                                                       : surfaceGraph.theme.windowColor
                        border.color: frequencySlider.pressed ? surfaceGraph.theme.labelTextColor
                                                              : surfaceGraph.theme.gridLineColor
                    }
                }

                Text {
                    id: frequencyText
                    text: "Freq: " + frequencySlider.value + " Hz"
                    verticalAlignment: Text.AlignVCenter
                    horizontalAlignment: Text.AlignHCenter
                    color: surfaceGraph.theme.labelTextColor
                }
            }
        }

        // FPS
        Rectangle {
            id: fpsindicator
            width: oscilloscopeView.controlWidth
            height: flatShadingToggle.implicitHeight
            anchors.left: oscilloscopeView.portraitMode ? parent.left : frequency.right
            anchors.top: oscilloscopeView.portraitMode ? frequency.bottom : parent.top
            anchors.margins: 5

            color: surfaceGraph.theme.windowColor
            border.color: surfaceGraph.theme.gridLineColor
            border.width: 1
            radius: 4

            Text {
                id: fpsText
                anchors.fill: parent
                verticalAlignment: Text.AlignVCenter
                horizontalAlignment: Text.AlignHCenter
                color: surfaceGraph.theme.labelTextColor
            }
        }

        // Selection
        Rectangle {
            id: selection
            width: oscilloscopeView.controlWidth
            height: flatShadingToggle.implicitHeight
            anchors.left: oscilloscopeView.portraitMode ? parent.left : fpsindicator.right
            anchors.top: oscilloscopeView.portraitMode ? fpsindicator.bottom : parent.top
            anchors.margins: 5

            color: surfaceGraph.theme.windowColor
            border.color: surfaceGraph.theme.gridLineColor
            border.width: 1
            radius: 4

            Text {
                id: selectionText
                anchors.fill: parent
                verticalAlignment: Text.AlignVCenter
                horizontalAlignment: Text.AlignHCenter
                text: "No selection"
                color: surfaceGraph.theme.labelTextColor
            }
        }

        // Flat shading
        Button {
            id: flatShadingToggle
            width: oscilloscopeView.buttonWidth
            anchors.left: parent.left
            anchors.top: selection.bottom
            anchors.margins: 5

            text: surfaceSeries.flatShadingSupported ? "Show\nSmooth" : "Flat\nnot supported"
            enabled: surfaceSeries.flatShadingSupported

            onClicked: {
                if (surfaceSeries.flatShadingEnabled) {
                    surfaceSeries.flatShadingEnabled = false;
                    text = "Show\nFlat"
                } else {
                    surfaceSeries.flatShadingEnabled = true;
                    text = "Show\nSmooth"
                }
            }

            contentItem: Text {
                text: flatShadingToggle.text
                opacity: flatShadingToggle.enabled ? 1.0 : 0.3
                color: surfaceGraph.theme.labelTextColor
                horizontalAlignment: Text.AlignHCenter
                verticalAlignment: Text.AlignVCenter
                elide: Text.ElideRight
            }

            background: Rectangle {
                opacity: flatShadingToggle.enabled ? 1 : 0.3
                color: flatShadingToggle.down ? surfaceGraph.theme.gridLineColor
                                              : surfaceGraph.theme.windowColor
                border.color: flatShadingToggle.down ? surfaceGraph.theme.labelTextColor
                                                     : surfaceGraph.theme.gridLineColor
                border.width: 1
                radius: 2
            }
        }

        // Surface grid
        Button {
            id: surfaceGridToggle
            width: oscilloscopeView.buttonWidth
            anchors.left: oscilloscopeView.portraitMode ? parent.left : flatShadingToggle.right
            anchors.top: oscilloscopeView.portraitMode ? flatShadingToggle.bottom : selection.bottom
            anchors.margins: 5

            text: "Hide\nSurface Grid"

            onClicked: {
                if (surfaceSeries.drawMode & Surface3DSeries.DrawWireframe) {
                    surfaceSeries.drawMode &= ~Surface3DSeries.DrawWireframe;
                    text = "Show\nSurface Grid";
                } else {
                    surfaceSeries.drawMode |= Surface3DSeries.DrawWireframe;
                    text = "Hid\nSurface Grid";
                }
            }

            contentItem: Text {
                text: surfaceGridToggle.text
                color: surfaceGraph.theme.labelTextColor
                horizontalAlignment: Text.AlignHCenter
                verticalAlignment: Text.AlignVCenter
                elide: Text.ElideRight
            }

            background: Rectangle {
                color: surfaceGridToggle.down ? surfaceGraph.theme.gridLineColor
                                              : surfaceGraph.theme.windowColor
                border.color: surfaceGridToggle.down ? surfaceGraph.theme.labelTextColor
                                                     : surfaceGraph.theme.gridLineColor
                border.width: 1
                radius: 2
            }
        }

        // Exit
        Button {
            id: exitButton
            width: oscilloscopeView.buttonWidth
            height: surfaceGridToggle.height
            anchors.left: oscilloscopeView.portraitMode ? parent.left : surfaceGridToggle.right
            anchors.top: oscilloscopeView.portraitMode ? surfaceGridToggle.bottom : selection.bottom
            anchors.margins: 5

            text: "Quit"

            onClicked: Qt.quit();

            contentItem: Text {
                text: exitButton.text
                color: surfaceGraph.theme.labelTextColor
                horizontalAlignment: Text.AlignHCenter
                verticalAlignment: Text.AlignVCenter
                elide: Text.ElideRight
            }

            background: Rectangle {
                color: exitButton.down ? surfaceGraph.theme.gridLineColor
                                       : surfaceGraph.theme.windowColor
                border.color: exitButton.down ? surfaceGraph.theme.labelTextColor
                                              : surfaceGraph.theme.gridLineColor
                border.width: 1
                radius: 2
            }
        }
    }

    //! [6]
    function generateData() {
        dataSource.generateData(oscilloscopeView.sampleCache, oscilloscopeView.sampleRows,
                                oscilloscopeView.sampleColumns,
                                surfaceGraph.axisX.min, surfaceGraph.axisX.max,
                                surfaceGraph.axisY.min, surfaceGraph.axisY.max,
                                surfaceGraph.axisZ.min, surfaceGraph.axisZ.max);
    }
    //! [6]
}
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause

import QtQuick
import QtQuick.Controls
import QtDataVisualization

Rectangle {
    id: spectrogramView
    color: surfaceGraph.theme.windowColor

    required property bool portraitMode

    property real buttonWidth: spectrogramView.portraitMode ? (spectrogramView.width - 35) / 2
                                                            : (spectrogramView.width - 50) / 5

    SpectrogramData {
        id: surfaceData
    }

    Item {
        id: surfaceView
        anchors.top: buttons.bottom
        anchors.left: parent.left
        anchors.right: legend.left
        anchors.bottom: parent.bottom

        ColorGradient {
            id: surfaceGradient
            ColorGradientStop { position: 0.0; color: "black" }
            ColorGradientStop { position: 0.2; color: "red" }
            ColorGradientStop { position: 0.5; color: "blue" }
            ColorGradientStop { position: 0.8; color: "yellow" }
            ColorGradientStop { position: 1.0; color: "white" }
        }

        ValueAxis3D {
            id: xAxis
            segmentCount: 8
            labelFormat: "%i\u00B0"
            title: "Angle"
            titleVisible: true
            titleFixed: false
        }

        ValueAxis3D {
            id: yAxis
            segmentCount: 8
            labelFormat: "%i \%"
            title: "Value"
            titleVisible: true
            labelAutoRotation: 0
            titleFixed: false
        }

        ValueAxis3D {
            id: zAxis
            segmentCount: 5
            labelFormat: "%i nm"
            title: "Radius"
            titleVisible: true
            titleFixed: false
        }

        Theme3D {
            id: customTheme
            type: Theme3D.ThemeQt
            // Don't show specular spotlight as we don't want it to distort the colors
            lightStrength: 0.0
            ambientLightStrength: 1.0
            backgroundEnabled: false
            gridLineColor: "#AAAAAA"
            windowColor: "#EEEEEE"
        }

        //! [0]
        Surface3D {
            id: surfaceGraph
            anchors.fill: parent

            Surface3DSeries {
                id: surfaceSeries
                flatShadingEnabled: false
                drawMode: Surface3DSeries.DrawSurface
                baseGradient: surfaceGradient
                colorStyle: Theme3D.ColorStyleRangeGradient
                itemLabelFormat: "(@xLabel, @zLabel): @yLabel"

                ItemModelSurfaceDataProxy {
                    itemModel: surfaceData.model
                    rowRole: "radius"
                    columnRole: "angle"
                    yPosRole: "value"
                }
            }
            //! [0]

            //! [1]
            // Remove the perspective and view the graph from top down to achieve 2D effect
            orthoProjection: true
            scene.activeCamera.cameraPreset: Camera3D.CameraPresetDirectlyAbove
            //! [1]

            //! [2]
            flipHorizontalGrid: true
            //! [2]

            //! [4]
            radialLabelOffset: 0.01
            //! [4]

            //! [5]
            inputHandler: TouchInputHandler3D {
                rotationEnabled: !surfaceGraph.orthoProjection
            }
            //! [5]

            theme: customTheme
            shadowQuality: AbstractGraph3D.ShadowQualityNone
            selectionMode: AbstractGraph3D.SelectionSlice | AbstractGraph3D.SelectionItemAndColumn
            axisX: xAxis
            axisY: yAxis
            axisZ: zAxis

            aspectRatio: 1.0
            horizontalAspectRatio: 1.0
            scene.activeCamera.zoomLevel: 140
        }
    }

    Item {
        id: buttons
        anchors.top: parent.top
        anchors.left: parent.left
        anchors.right: parent.right
        height: spectrogramView.portraitMode ? (polarToggle.height + 10) * 3
                                             : polarToggle.height + 30
        anchors.margins: 10

        //! [3]
        Button {
            id: polarToggle
            anchors.margins: 5
            anchors.left: parent.left
            anchors.top: parent.top
            width: spectrogramView.buttonWidth // Calculated elsewhere based on screen orientation
            text: "Switch to\n" + (surfaceGraph.polar ? "cartesian" : "polar")
            onClicked: surfaceGraph.polar = !surfaceGraph.polar;
        }
        //! [3]

        Button {
            id: orthoToggle
            anchors.margins: 5
            anchors.left: polarToggle.right
            anchors.top: parent.top
            width: spectrogramView.buttonWidth
            text: "Switch to\n" + (surfaceGraph.orthoProjection ? "perspective" : "orthographic")
            onClicked: {
                if (surfaceGraph.orthoProjection) {
                    surfaceGraph.orthoProjection = false;
                    xAxis.labelAutoRotation = 30;
                    yAxis.labelAutoRotation = 30;
                    zAxis.labelAutoRotation = 30;
                } else {
                    surfaceGraph.orthoProjection = true;
                    surfaceGraph.scene.activeCamera.cameraPreset
                            = Camera3D.CameraPresetDirectlyAbove;
                    surfaceSeries.drawMode &= ~Surface3DSeries.DrawWireframe;
                    xAxis.labelAutoRotation = 0;
                    yAxis.labelAutoRotation = 0;
                    zAxis.labelAutoRotation = 0;
                }
            }
        }

        Button {
            id: flipGridToggle
            anchors.margins: 5
            anchors.left: spectrogramView.portraitMode ? parent.left : orthoToggle.right
            anchors.top: spectrogramView.portraitMode ? orthoToggle.bottom : parent.top
            width: spectrogramView.buttonWidth
            text: "Toggle axis\ngrid on top"
            onClicked: surfaceGraph.flipHorizontalGrid = !surfaceGraph.flipHorizontalGrid;
        }

        Button {
            id: labelOffsetToggle
            anchors.margins: 5
            anchors.left: flipGridToggle.right
            anchors.top: spectrogramView.portraitMode ? orthoToggle.bottom : parent.top
            width: spectrogramView.buttonWidth
            text: "Toggle radial\nlabel position"
            visible: surfaceGraph.polar
            onClicked: {
                if (surfaceGraph.radialLabelOffset >= 1.0)
                    surfaceGraph.radialLabelOffset = 0.01;
                else
                    surfaceGraph.radialLabelOffset = 1.0;
            }
        }

        Button {
            id: surfaceGridToggle
            anchors.margins: 5
            anchors.left: spectrogramView.portraitMode ? (labelOffsetToggle.visible ? parent.left
                                                                                    : flipGridToggle.right)
                                                       : (labelOffsetToggle.visible ? labelOffsetToggle.right
                                                                                    : flipGridToggle.right)
            anchors.top: spectrogramView.portraitMode ? (labelOffsetToggle.visible ? labelOffsetToggle.bottom
                                                                                   : orthoToggle.bottom)
                                                      : parent.top
            width: spectrogramView.buttonWidth
            text: "Toggle\nsurface grid"
            visible: !surfaceGraph.orthoProjection
            onClicked: {
                if (surfaceSeries.drawMode & Surface3DSeries.DrawWireframe)
                    surfaceSeries.drawMode &= ~Surface3DSeries.DrawWireframe;
                else
                    surfaceSeries.drawMode |= Surface3DSeries.DrawWireframe;
            }
        }
    }

    Item {
        id: legend
        anchors.bottom: parent.bottom
        anchors.top: buttons.bottom
        anchors.right: parent.right
        width: spectrogramView.portraitMode ? 100 : 125

        Rectangle {
            id: gradient
            anchors.margins: 20
            anchors.bottom: legend.bottom
            anchors.top: legend.top
            anchors.right: legend.right
            border.color: "black"
            border.width: 1
            width: spectrogramView.portraitMode ? 25 : 50
            rotation: 180
            gradient: Gradient {
                GradientStop { position: 0.0; color: "black" }
                GradientStop { position: 0.2; color: "red" }
                GradientStop { position: 0.5; color: "blue" }
                GradientStop { position: 0.8; color: "yellow" }
                GradientStop { position: 1.0; color: "white" }
            }
        }

        Text {
            anchors.verticalCenter: gradient.bottom
            anchors.right: gradient.left
            anchors.margins: 2
            text: surfaceGraph.axisY.min  + "%"
        }

        Text {
            anchors.verticalCenter: gradient.verticalCenter
            anchors.right: gradient.left
            anchors.margins: 2
            text: (surfaceGraph.axisY.max + surfaceGraph.axisY.min) / 2  + "%"
        }

        Text {
            anchors.verticalCenter: gradient.top
            anchors.right: gradient.left
            anchors.margins: 2
            text: surfaceGraph.axisY.max + "%"
        }
    }
}
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause

import QtQuick
import QtQuick.Controls
import QtQuick.Layouts

Item {
    id: mainView
    width: 1280
    height: 1024
    visible: true

    property bool portraitMode: width < height

    TabBar {
        id: tabBar
        width: parent.width

        TabButton {
            text: "Height Map"
        }

        TabButton {
            text: "Spectrogram"
        }

        TabButton {
            text: "Oscilloscope"
        }
    }

    StackLayout {
        anchors.top: tabBar.bottom
        anchors.bottom: parent.bottom
        width: parent.width
        currentIndex: tabBar.currentIndex

        SurfaceHeightMap {
            Layout.fillHeight: true
            Layout.fillWidth: true
            portraitMode: mainView.portraitMode
        }

        SurfaceSpectrogram {
            Layout.fillHeight: true
            Layout.fillWidth: true
            portraitMode: mainView.portraitMode
        }

        SurfaceOscilloscope {
            Layout.fillHeight: true
            Layout.fillWidth: true
            portraitMode: mainView.portraitMode
        }
    }
}
下一页
3D柱状图示例
上一页
图形画廊
版权 © 2024 Qt公司 Ltd. 本文档的贡献包含其各自拥有的版权。本提供的文档根据GNU自由文档许可证版本1.3(https://gnu.ac.cn/licenses/fdl.html)许可,由自由软件基金会发布。Qt及其相关标志是芬兰和/或在其他国家和地区的Qt公司的商标。所有其他商标均为其各自所有者的财产。
用Sphinx和@pradyunsg的Furo制作