0

你好。我想在 android 中创建一个 3dplot 图。我想使用 jzy3d lib 并找到这个示例作为开始。

import org.jzy3d.chart.Chart;
import org.jzy3d.colors.Color;
import org.jzy3d.colors.ColorMapper;
import org.jzy3d.colors.colormaps.ColorMapRainbow;
import org.jzy3d.maths.Range;
import org.jzy3d.plot3d.builder.Builder;
import org.jzy3d.plot3d.builder.Mapper;
import org.jzy3d.plot3d.builder.concrete.OrthonormalGrid;
import org.jzy3d.plot3d.primitives.Shape;
import org.jzy3d.plot3d.rendering.canvas.Quality;
import org.jzy3d.ui.ChartLauncher;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Mapper mapper = new Mapper() {
        public double f(double x, double y) {
            return 10 * Math.sin(x / 10) * Math.cos(y / 20) * x;
        }
    };

    // Define range and precision for the function to plot
    Range range = new Range(-150, 150);
    int steps = 50;

    // Create a surface drawing that function
    Shape surface = (Shape) Builder.buildOrthonormal(new OrthonormalGrid(range, steps, range, steps), mapper);
    surface.setColorMapper(new ColorMapper(new ColorMapRainbow(), surface.getBounds().getZmin(), surface.getBounds().getZmax()));
    surface.setFaceDisplayed(true);
    surface.setWireframeDisplayed(false);
    surface.setWireframeColor(Color.BLACK);

    // Create a chart and add the surface
    Chart chart = new Chart(Quality.Advanced);
    chart.getScene().getGraph().add(surface);
    ChartLauncher.openChart(chart);
}

但是当我想运行它时,它会给出以下错误消息:

05-29 20:10:16.685: E/AndroidRuntime(20113): java.lang.NoClassDefFoundError: org.jzy3d.plot3d.rendering.canvas.CanvasAWT     

当然,我将 jzy3d、jogl、swt、gluegen 库添加到我的项目中。

在此处输入图像描述

4

2 回答 2

1

Android 不支持 AWT。此外,您使用来自 JOGL 1 的“jogl.jar”,而 JOGL 仅从其第二版开始支持 Android。请使用更新版本的 Jzy3D 并对 JOGL 和 GlueGen 执行相同操作。据我所知,Jzy3D 0.8 不支持 Android。

于 2014-05-29T22:11:54.803 回答
0

JOGL2,用于 Jzy3d 0.9.x 渲染的底层框架允许在 Android 上部署,因此 Jzy3d 将能够这样做。

对于 Android,要求不依赖 AWT,这可以通过忽略 jzy3d 主库中的 src/awt 来实现(忽略 swing 和 swt 也应该是一个好主意)。Jzy3d 有自己的 AWT Rectangle 等价物,所以它仍然会构建。您必须派生 CanvasNewtAwt [1] 以使其与 Android 一起使用(请参阅 [2] 和 [3])。您还想了解 maven poms 如何选择 awt 和 swing 源 [4]。

[1] http://doc.jzy3d.org/javadoc/0.9.1/jzy3d-api/org/jzy3d/plot3d/rendering/canvas/CanvasNewtAwt.html

[2] http://forum.jogamp.org/Migrate-a-Java-application-using-Jogl-to-Android-tablet-td3732586.html

[3] http://jogamp.org/jogl/doc/NEWT-Overview.html

[4] https://github.com/jzy3d/jzy3d-api/blob/master/jzy3d-api/pom.xml

于 2014-09-04T15:49:05.117 回答