goo blog サービス終了のお知らせ 

Take3's blog

日々の記録などをこつこつ

GNU Octave 3.6.4 (Windows)のFigure 1を前面に出す

2014-06-08 08:00:18 | プログラミング関係

 GNU Octave 3.6.4 (Windows)のFigure 1を前面に出すプログラム

 以下のようなコード

#include <stdio.h>
#include <string.h>
#include <windows.h>

typedef struct  _dataSet{
 HWND hWnd;
 char WindowName[256];
} DataSet;

#define true 1
#define false 0


BOOL  CALLBACK  EnumWndProc( HWND hWnd, LPARAM lParam )
{
 char buff[256]="";
 GetWindowText( hWnd,buff, sizeof(buff));
 if(strcmp(buff,((DataSet*)lParam)->WindowName) == 0) {
  ((DataSet*)lParam)->hWnd = hWnd;
 }
 return true;
}
BOOL CALLBACK EnumChildProc( HWND hWnd, LPARAM lParam )
{
 ((DataSet*)lParam)->hWnd = hWnd;
    return TRUE;
}

int main(int argc, char* argv[])
{

 DataSet ds;
 ds.hWnd =NULL;

 if (argc == 1) {
  strcpy(ds.WindowName, "Figure 1");
 } else if (argc == 2) {
  strcpy(ds.WindowName, argv[1]);
 }
 RECT rect1, rect2;

 EnumWindows( EnumWndProc, (LPARAM)&ds);

 if(ds.hWnd != NULL){

  SetForegroundWindow(ds.hWnd);
  SetFocus(ds.hWnd);
  GetWindowRect(ds.hWnd, &rect1);
  EnumChildWindows(ds.hWnd, EnumChildProc, (LPARAM)&ds);
  GetWindowRect(ds.hWnd, &rect2);
  printf( TEXT("%d %d %d %d"), rect2.left, rect2.top, rect2.right, rect2.bottom);

 }
 return 0;
}


Java 数値列から指定の数字に一番近いものを選択する例 Vol. 2

2014-06-03 04:49:34 | プログラミング関係

Java 数値列から指定の数字に一番近いものを選択する例では<>で囲われたものが全部消えてしまった。

一番近い者を再現しようと思うと以下のようになる.

package treesetormap_test;

import java.util.Map.Entry;
import java.util.TreeMap;
import java.util.TreeSet;

public class TreeSetOrMap_Test {

 public static void main(String[] args) {
  // TODO 自動生成されたメソッド・スタブ

  Double[] dArray = {1., 2., 3., 5., 8., 13., 15.};
  Integer[] indexArray = new Integer[dArray.length];
  for (int i = 0; i < indexArray.length; i++) {
   indexArray[i] = i;
  }

  Double num = 10.;

  TreeSet<Double> dataSet = new TreeSet<Double>();

  for (int i = 0; i < dArray.length; i++) {
   dataSet.add(dArray[i]);
  }

  Double floor = dataSet.floor(num);
  Double ceiling = dataSet.ceiling(num);

  Double nearest = Math.abs(floor - num) <= Math.abs(ceiling - num) ? floor : ceiling;

  System.out.println(nearest);

 

  TreeMap<Double, Integer> dataMap = new TreeMap<Double, Integer>();
  for (int i = 0; i < dArray.length; i++) {
   dataMap.put(dArray[i], indexArray[i]);
  }
  floor = dataMap.floorKey(num);
  ceiling = dataMap.ceilingKey(num);

  Entry<Double, Integer> i_nearest = Math.abs(floor - num) <= Math.abs(ceiling - num) ? dataMap.floorEntry(floor) : dataMap.floorEntry(ceiling);

  System.out.println(i_nearest.getValue());
 }

}


GNU Octave uigetfileの使いよう Vol. 2

2014-06-01 16:00:58 | プログラミング関係

GNU Octave uigetfileの使いようではuigetfileは使える使えるといっていたが,バージョンや環境によって癖があるようだ。

特に,環境によって 繰り返し使用していたりウィンドウをたくさん出していると他のプロットのウィンドウなどの下に潜ってしまうことがある。

ただし,回避策は一応ある。Windows限定であるが,たとえば以下のように実装する。

Octave

system('setfore.exe', 'async');
[FileName,PathName] = uigetfile('*.*','File open dialog');

 

そして,実行後500 ms後に指定のウィンドウを前面に出すプログラムを準備
setfore.c  // gcc setfore.c -o setfore -mwindows

#include <stdio.h>
#include <string.h>
#include <windows.h>

typedef struct  _dataSet{
	HWND hWnd;
	char WindowName[256];
} DataSet;

#define true 1
#define false 0

BOOL  CALLBACK  EnumWndProc( HWND hWnd, LPARAM lParam )
{
	char buff[256]="";
	GetWindowText( hWnd,buff, sizeof(buff));
	if(strcmp(buff,((DataSet*)lParam)->WindowName) == 0) {
		((DataSet*)lParam)->hWnd = hWnd;
	}
	return true;
}

int main(int argc, char* argv[])
{
	DataSet ds;
	ds.hWnd =NULL;
	strcpy(ds.WindowName, "File open dialog");
	Sleep(500);
	EnumWindows( EnumWndProc, (LPARAM)&ds);

	if(ds.hWnd != NULL){
		SetForegroundWindow(
			ds.hWnd
		);
	}
	return 0;
}

Octave doEvalStringの使いようVol. 2

2014-05-30 05:49:09 | プログラミング関係

doEvalStringの使用例を考えると,以下のようになった。

もちろん別ファイルをテキスト形式で用意しておいて読み込むことも可能と思われる。

Java側

package jdialogMeister;

import org.octave.Octave;

public class test_doEvalString {

	public test_doEvalString() {

	}

	public String test_code(double x, double y) {
		Octave.doEvalString(String.format("x = %.16g;", x)); //このような操作で変数を動的に変更することも可能		Octave.doEvalString(String.format("y = %.16g;", y));
		Octave.doEvalString("z = x * y;");
		Octave.doEvalString("z");
		return "END OF CODE";
	}
}

Octave側

javaaddpath('./jdialogMeister.jar');

objectA = javaObject('jdialogMeister.test_doEvalString');
a = 2.0;
b = 3.0;
objectA.test_code(a, b);


Octave doEvalStringの使いよう

2014-05-29 05:29:47 | プログラミング関係

GNU Octave 用のJDialogのテスト(失敗中)Vol. 6でoctave.jarに含まれる
Octave.callで関数を呼び出せることを確認できていたが,
Octave.doEvalString("abc = abs(-10.0);")
などでJavaのコードの中にOctaveの関数を挿入できる。

たとえば,変数を代入するときにOctave側のコードを実行して代入しておくことができる。

使いようはある