zoukankan      html  css  js  c++  java
  • (三)如何用ChartDirector绘制三维surface chart

    二维的surface chart十分常见,而作为非专业人士,你是否会被那些弯弯曲曲的等高线图形绕晕?今天就跟大家展示如何用Web图表控件ChartDirector 绘制三维surface chart

    主要步骤:

    • 首先用SurfaceChart.SurfaceChart创建一个SurfaceChart对象
    • 用ThreeDChart.setPlotRegion指定绘图区域的位置和大小
    • SurfaceChart.setData设置图表的数据
    • 用SurfaceChart.setInterpolation插入新数据
    • ThreeDChart.setColorAxis设置颜色轴的位置
    • 用BaseChart.addTitle 和 Axis.setTitle分别为图表和轴添加标题
    • 最后用BaseChart.makeChart生成图表就OK了!

    ChartDirector绘制三维surface chart示例代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    #include "chartdir.h"
    #include <math.h>
     
    int main(int argc, char *argv[])
    {
        // The x and y coordinates of the grid
        double dataX[] = {-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6,
            7, 8, 9, 10};
        double dataY[] = {-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6,
            7, 8, 9, 10};
     
        // The values at the grid points. In this example, we will compute the values
        // using the formula z = x * sin(y) + y * sin(x).
        double dataZ[(int)(sizeof(dataX) / sizeof(dataX[0])) * (int)(sizeof(dataY) /
            sizeof(dataY[0]))];
        int yIndex;
        for(yIndex = 0; yIndex < (int)(sizeof(dataY) / sizeof(dataY[0])); ++yIndex) {
            double y = dataY[yIndex];
            int xIndex;
            for(xIndex = 0; xIndex < (int)(sizeof(dataX) / sizeof(dataX[0])); ++xIndex) {
                double x = dataX[xIndex];
                dataZ[yIndex * (int)(sizeof(dataX) / sizeof(dataX[0])) + xIndex] = x *
                    sin(y) + y * sin(x);
            }
        }
     
        // Create a SurfaceChart object of size 720 x 600 pixels
        SurfaceChart *c = new SurfaceChart(720, 600);
     
        // Add a title to the chart using 20 points Times New Roman Italic font
        c->addTitle("Surface Energy Density   ", "timesi.ttf", 20);
     
        // Set the center of the plot region at (350, 280), and set width x depth x
        // height to 360 x 360 x 270 pixels
        c->setPlotRegion(350, 280, 360, 360, 270);
     
        // Set the data to use to plot the chart
        c->setData(DoubleArray(dataX, (int)(sizeof(dataX) / sizeof(dataX[0]))),
            DoubleArray(dataY, (int)(sizeof(dataY) / sizeof(dataY[0]))), DoubleArray(
            dataZ, (int)(sizeof(dataZ) / sizeof(dataZ[0]))));
     
        // Spline interpolate data to a 80 x 80 grid for a smooth surface
        c->setInterpolation(80, 80);
     
        // Add a color axis (the legend) in which the left center is anchored at (645,
        // 270). Set the length to 200 pixels and the labels on the right side.
        c->setColorAxis(645, 270, Chart::Left, 200, Chart::Right);
     
        // Set the x, y and z axis titles using 10 points Arial Bold font
        c->xAxis()->setTitle("X (nm)", "arialbd.ttf", 10);
        c->yAxis()->setTitle("Y (nm)", "arialbd.ttf", 10);
        c->zAxis()->setTitle("Energy Density (J/m<*font,super*>2<*/font*>)",
            "arialbd.ttf", 10);
     
        // Output the chart
        c->makeChart("surface.jpg");
     
        //free up resources
        delete c;
        return 0;
    }

    除此之外,你还可以用ChartDirector的surface chart图表样式绘制海面天气图、地面气压图等,应用范围非常广泛。

    欢迎加群交流控件经验:301644590
  • 相关阅读:
    机器学习(Machine Learning)&深入学习(Deep Learning)资料
    漫谈 机器学习
    Android 屏幕滑动事件
    Andriod中绘(画)图----Canvas的使用详解
    android studio上代码编译调试中遇到的一些异常记录
    Android签名详解(debug和release)
    如何用AndroidStudio导入github项目
    java synchronized详解
    视频编解码学习之一:理论基础
    Android 环境下编译FFmpeg
  • 原文地址:https://www.cnblogs.com/flashcharts/p/2971009.html
Copyright © 2011-2022 走看看