《java与MATLAB混合编程》之《java调用MATLAB作图》

    本人研究课题是无人机航路规划,最近想用java调用MATLAB作三维地形图,动手一搜,果然有这方面的应用,看来不懂不会的东西要多搜索,万一前人已经碰到过并且解决了呢!微笑    

    题目之所以那样写,是因为本文主要描述了java调用MATLAB的方法,言外之意就是也存在MATLAB调用java的情况,想深入研究的可参见马松辉、吴佳楠和邓红德的《MATLAB下的java图形用户界面开发》。

    做联调的第一步是前提是jdk环境变量要配置成功,MATLAB安装完成!MATLAB和jdk版本要匹配,否则会出现做不出图,或者图是空白等情况。

如何安装于MATLAB版本匹配的JDK:

    在MATLAB命令行窗口中输入 version -java,会显示MATLAB中预置的java虚拟机的版本,本人机器上显示如下:


所以JDK也得是1.6版本的,之前不知道走了很多弯路!

    经过两三天的网上搜索,发现了很多介绍java调用MATLAB的博文,博主们图文并茂,跟着他们的说明很快就能做出图来。这里我给出我主要参考的两篇博文的地址,也算是给自己复习准备的参考资料吧!小魏的修行路 http://blog.csdn.net/xiaowei_cqu/article/details/7038819金良山庄 http://blog.csdn.net/u012176591/article/details/43526581

    以上两位博主写的非常详细,其中一位还给本人做了邮件指导

    以上两位主要讲了把MATLAB的m函数文件做出相应的jar,然后在Eclipse中调用,后来发现m脚本文件也能进行打包并调用,下面以画动态螺旋线为例,m文件源自此处,介绍一下我的操作步骤:

step one:

把以下代码保存成m脚本文件。

t=0:0.1:10*pi;

i=1;

h=plot3(sin(t(i)),cos(t(i)),t(i),'*','erasemode','none');

grid on

axis([-2 2 -2 2 0 35])

for i=2:length(t)

    set(h,'xdata',sin(t(i)),'ydata',cos(t(i)),'zdata',t(i));

    drawnow

    pause(0.1)

end

title('动态螺旋线');

保存时以drawspiral为文件名存盘。

step two:

在MATLAB命令行中输入deploytool,调出部署工具,name被我命为SpiralDemo,Location我选与m脚本文件同文件夹,Type选择Java Package,如下图所示:


step three:

在MATLAB中编译m脚本文件。在如下图所示的界面中,1、先增加类(Add classes),2、本人命名为DrawSpiral,然后增加文件(Add classes)——把刚才的m脚本文件引入进来,3、编译


编译过程稍长,完成后会在保存m脚本文件的文件夹中发现SpiralDemo文件夹,打开该文件加,接着再打开distrib文件夹,会发现SpiralDemo.jar文件,该文件所在的路径正是待会要导入Eclipse中Build Path。

step four:

在Eclipse中建立工程TrySpiralDemo,接着往Referenced Libraries导入Build Path,一共导入两个

一个是MATLAB所带的第三方包javabuilder.jar,在本人计算机上路径为C:\Program Files\MATLAB\R2013a\toolbox\javabuilder\jar

另外一个是刚才编译生成的包,SpiralDemo.jar,在本人计算机上路径C:\Users\Liu\Desktop\spiral\SpiralDemo\distrib,下图所示:


step five:

编写java代码,作图

import com.mathworks.toolbox.javabuilder.*;
import SpiralDemo.DrawSpiral;
public class Main 
{
	public static void main(String[] args)
	{
		DrawSpiral drawspiral01 = null; //作图类对象
		
		try
		{
			drawspiral01 = new DrawSpiral();
			drawspiral01.drawspiral();
			drawspiral01.waitForFigures();
		}
		catch(Exception e)
		{
			System.out.println("Excepiton:" + e.toString());
		}
		finally
		{
			//释放本地资源
			if(drawspiral01 != null)
			{
				drawspiral01.dispose();
			}
		}
	}
}

    代码很简单,就是用一个作图类初始化一个作图对象,然后用该对象调用作图函数,即可得出螺旋线,注意是动态作图哦!

运行结果下图所示:


  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值