您好。我想在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 libs添加到我的项目中。
答案 0 :(得分:1)
Android下不支持AWT。而且,你使用" jogl.jar"它来自JOGL 1,而JOGL仅支持Android,因为它的第二个版本。请使用更新版本的Jzy3D并对JOGL和GlueGen执行相同操作。据我所知,Jzy3D 0.8并不支持Android。
答案 1 :(得分:0)
JOGL2,Jzy3d 0.9.x渲染的底层框架允许在Android上进行部署,因此Jzy3d将能够这样做。
对于Android,需要不依赖于AWT,这可以通过忽略jzy3d主库中的src / awt来实现(忽略swing和swt也应该是一个好主意)。 Jzy3d有自己的等同于AWT矩形&喜欢这样它仍然会建立。 您必须派生CanvasNewtAwt [1]才能使其与Android一起使用(参见[2]和[3])。你还想看看maven poms如何选择awt和swing source [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