2014.02.24

タブレットのデザイン

20140224_234055


タブレットのアプリを初めてデザインしている。今更感があって始めは乗り気でなかったけど背景を動的に変化させるっていう必要があって、コードを書き始めたらなかなか楽しい。実の無い表面だけのデザインって嫌いだけど、コード書くのは楽しいので黙って書いている。

| | コメント (0) | トラックバック (0)

2012.01.09

正規表現 バックスラッシュをmacで書く

正規表現でスペースを抜きたい時、「\\s」と書くようだが、macでバックスラッシュの打ち方が分からない。
バックスラッシュ → 変換 → 「\」ではもちろん駄目だった。
幾つか試してみた所、「option」+「¥」で打つことができた。


| | コメント (0) | トラックバック (0)

2011.04.05

ややこしい;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		int dimX = 4;
		int dimY = 4;
		int dimOll = 4*4;

		int[] test = new int[dimOll * 3];

		for(int i = 0; i < dimOll * 3; i++){
			test[i] = i + 1;
			if((i + 1) % (dimX * 3) == 0){
				System.out.println(test[i] + " ");
			} else if(i < 9){
				System.out.print("0" + test[i] + " ");
			} else {
				System.out.print(test[i] + " ");
			}
		}

		//書き込み
		for(int i = 0; i < dimOll; i++){
			if(i < dimX){//上
				if(i == 0){//左
					test[i * 3] = 0;
					test[i * 3 + 1] = 0;
					test[i * 3 + 2] = 0;
				} else if(i == dimX - 1){//右
					test[i * 3] = 2;
					test[i * 3 + 1] = 2;
					test[i * 3 + 2] = 2;
				} else {//中
					test[i * 3] = 1;
					test[i * 3 + 1] = 1;
					test[i * 3 + 2] = 1;
				}
			} else if(i > dimX * (dimY - 1) - 1){//下
				if(i == dimX * (dimY - 1)){//左
					test[i * 3] = 6;
					test[i * 3 + 1] = 6;
					test[i * 3 + 2] = 6;
				} else if(i == dimX * dimY - 1){//右
					test[i * 3] = 8;
					test[i * 3 + 1] = 8;
					test[i * 3 + 2] = 8;
				} else {
					test[i * 3] = 7;
					test[i * 3 + 1] = 7;
					test[i * 3 + 2] = 7;
				}
			} else if(i % dimX == 0){
				test[i * 3] = 3;
				test[i * 3 + 1] = 3;
				test[i * 3 + 2] = 3;
			} else if((i + 1) % dimX == 0){
				test[i * 3] = 5;
				test[i * 3 + 1] = 5;
				test[i * 3 + 2] = 5;
			} else {
				test[i * 3] = 4;
				test[i * 3 + 1] = 4;
				test[i * 3 + 2] = 4;
			}
		}

		System.out.println();
		for(int i = 0; i < dimOll * 3; i++){
			if((i + 1) % (dimX * 3) == 0){
				System.out.println(test[i] + " ");
			} else {
				System.out.print(test[i] + " ");
			}
		}
	}
}

01 02 03 04 05 06 07 08 09 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 

0 0 0 1 1 1 1 1 1 2 2 2 
3 3 3 4 4 4 4 4 4 5 5 5 
3 3 3 4 4 4 4 4 4 5 5 5 
6 6 6 7 7 7 7 7 7 8 8 8 



Javaによる連続体力学の有限要素法 Javaによる連続体力学の有限要素法

価格 : ¥ 2,940(税込み)

本書は、有限要素法の基本的な考え方を説明するとともに、連続体力学が対象とする様々な解析、すなわち構造解析、流体解析、熱流体連成解析、構造流体連成解析への適用を通して具体的な手法(定式化、離散化、マトリクス計算など)を解説する。

| | コメント (4) | トラックバック (0)

2010.12.23

二次元配列のFloatBuffer生成(ダイレクト)

忘れっぽいのですぐに沢山のことを忘れる。忘れないためには日々続けること。
最近javaのソースを書いた試しがないので、こんな事も思いつくのに時間が掛かる。;_;


OpenGLにて、正二十面体を描画する事になり、今までの流れ通り配列を使うのですが、その配列が二次元配列になっており、FloatBuffer.put(配列)で使えないのです。
困った。ということで、一から配列について学びました。
とりあえず入れることは出来た。

  1. import java.nio.ByteBuffer;
  2. import java.nio.ByteOrder;
  3. import java.nio.FloatBuffer;
  4.  
  5.  
  6. public class bufferTest02 {
  7.  
  8.     static final float fBuffer2[][] = {
  9.         {0.1f, 0.2f, 0.3f}, {0.4f, 0.5f, 0.6f}, {0.7f, 0.8f, 0.9f}, {1.0f, 1.1f, 1.2f}
  10.     };
  11.  
  12.     public static void main(String[] args){
  13.  
  14.         ByteBuffer bb2 = ByteBuffer.allocateDirect(fBuffer2.length * fBuffer2[1].length * 4);
  15.  
  16.         bb2.order(ByteOrder.nativeOrder());
  17.  
  18.         FloatBuffer fb = bb2.asFloatBuffer();
  19.  
  20.         for(int i = 0; i < fBuffer2.length; i++){
  21.             fb.put(fBuffer2[i]);
  22.         }
  23.  
  24.         fb.position(0);
  25.  
  26.         for(int i = 0; i < fBuffer2.length * 3; i ++){
  27.  
  28.             System.out.println("get " + fb.get());
  29.         }
  30.     }
  31. }
  32.  



出力は、

get 0.1
get 0.2
get 0.3
get 0.4
get 0.5
get 0.6
get 0.7
get 0.8
get 0.9
get 1.0
get 1.1
get 1.2


Effective Java 第2版 (The Java Series) Effective Java 第2版 (The Java Series)

価格 : ¥ 3,780(税込み)

Javaプログラミング書籍の定本「Effective Java」の改訂版です。著者のGoogle, Sun Microsystemsにおけるソフトウェア開発で得た知識・経験をまとめた、JavaでプログラミングをするすべてのSE必読の書籍です。2001年の初版以降の追加項目、JavaSE6.0に対応

| | コメント (0) | トラックバック (0)

java ByteBufferのメモ

OpenGLにて配列を使う際、gl.glVertexPointer()等を使用するのですが、その引数に配列のpointerを渡さなければならない。
これがよく分からず、ネットからコードを拝借することとした。コードはおおかた理解できたのだが、

ByteBuffer bb.order(ByteOrder.nativeOrder());

の一文が分からなかった。なので、下のコードのようなテストをしてみたところ、

no.01 java.nio.DirectByteBuffer[pos=0 lim=12 cap=12]
ByteOrder.nativeOrder() LITTLE_ENDIAN
no.02 java.nio.DirectByteBuffer[pos=0 lim=12 cap=12]
no.03 java.nio.DirectFloatBufferU[pos=0 lim=3 cap=3]
get.01 0.1
get.02 0.2

と出力を得る事が出来た。
はて、“LITTLE_ENDIAN”?
調べてみると、

2バイト以上のデータ量を持つ数値データを記録したり転送するときには1バイトごとに分割するが、その際の記録/転送を行う順番のこと。via.バイトオーダーとは

リトルエンディアンとは、最下位からのパターンだ。なるほど。

  1. import java.nio.ByteBuffer;
  2. import java.nio.ByteOrder;
  3. import java.nio.FloatBuffer;
  4.  
  5.  
  6. public class bufferTest {
  7.  
  8.     static final float fBuffer[] = { 0.1f, 0.2f, 0.3f };
  9.  
  10.     public static void main(String[] args){
  11.  
  12.         ByteBuffer bb = ByteBuffer.allocateDirect(fBuffer.length * 4);
  13.  
  14.         System.out.println("no.01  " + bb);//////////////////////
  15.  
  16.         System.out.println("ByteOrder.nativeOrder() " + ByteOrder.nativeOrder());
  17.         bb.order(ByteOrder.nativeOrder());
  18.  
  19.         System.out.println("no.02  " + bb);//////////////////////
  20.  
  21.         FloatBuffer fb = bb.asFloatBuffer();
  22.  
  23.         System.out.println("no.03  " + fb);//////////////////////
  24.  
  25.         fb.put(fBuffer);
  26.  
  27.         fb.position(0);
  28.  
  29.         System.out.println("get.01 " + fb.get());//////////////////////
  30.         System.out.println("get.02 " + fb.get());//////////////////////
  31.        
  32.     }
  33. }



はじめてのOpenGL はじめてのOpenGL
ライブラリを使った「3D‐CGプログラミング」の基本


価格 : ¥ 2,415(税込み)

「OpenGL」(Open Graphics Library)は、3Dグラフィックスを生成するためのライブラリで、さまざまな言語、プラットフォームで使うことができます。「開発環境」の設定から「関連ライブラリ」の使い方まで。OpenGLをまったく触ったことがない人でも、すぐ始められるように、OpenGLと3Dグラフィックスの概要から学んでいきます。

| | コメント (0) | トラックバック (0)

2010.10.12

プロジェクトのエンコーディング

忘れそうなのでメモ。


MacOSを新しく6.3にしてからjavaのコメントアウトが文字化けするようになったので、そのエンコーディング変更方法をメモしたいと思います。


まずは、下記のように日本語コメント部分だけが文字化けを起こしています。

0001



それを解決するために、プロジェクトを右クリックし、プロパティーを選びます。

0002



リソースの部分で、テキスト・ファイル・エンコードに注目。

0003



文字化けを起こさない物に変更。

0004



無事完了!!

0005




Google Androidプログラミング入門 Google Androidプログラミング入門

価格 : ¥ 3,990(税込み)

これ1冊で基礎から応用までを学べます!
実践的ノウハウが結集した開発者必携の書がついに完成。

| | コメント (0) | トラックバック (0)

2010.09.29

Matrixの総当たりループ

随分前に書いたプログラムなため忘れそうなのでメモ。
始めから話の道を逸れることになりますが、数ヶ月前まで引力や、遠心力などの実装に興味があり、そのようなプログラムを組めたらさぞ嬉しいだろうと考えていました。
しかし、実際にプログラムとして形にするとその時は嬉しいのですが、すぐに、もっとこうしたい!という具合に欲が出てきます。
そうして、今では被写界深度のプログラムについて日々調査しているわけで…。


本題に入ります。
今回のメモは前記の引力プログラムの時に時間を食ったMatrixの総当たりループについてです。これは、MXJ、つまり、Javaで実装しています。ですので、普通のforループコードです。
苦戦したのはMatrixをどうforループで呼び出し、演算するかです。それによって、forループの形も変わってくるので。

以下がコード抜粋


  1. for(int i = 0; i < dimOll - 1; i++){
  2.             for(int j = i + 1; j < dimOll; j++){
  3.  
  4.                 final int AY = i / dim[0];
  5.                 final int AX = i - dim[0] * AY;
  6.                 final int BY = j / dim[0];
  7.                 final int BX = j - dim[0] * BY;
  8.  
  9.                 final float[] APOS = jmPosition.getcell2dFloat(AX, AY);
  10.                 final float[] BPOS = jmPosition.getcell2dFloat(BX, BY);
  11.  
  12.                 //A
  13.                 matrixArray[i * 3] += (APOS[0] - BPOS[0]) * rituCFA * CFSize;
  14.                 matrixArray[i * 3 + 1] += (APOS[1] - BPOS[1]) * rituCFA * CFSize;
  15.                 matrixArray[i * 3 + 2] += (APOS[2] - BPOS[2]) * rituCFA * CFSize;
  16.                 //B
  17.                 matrixArray[j * 3] += (BPOS[0] - APOS[0]) * rituCFB * CFSize;
  18.                 matrixArray[j * 3 + 1] += (BPOS[1] - APOS[1]) * rituCFB * CFSize;
  19.                 matrixArray[j * 3 + 2] += (BPOS[2] - APOS[2]) * rituCFB * CFSize;
  20.  
  21.             }
  22.         }
  23.  



総当たりのforループは折り返しのない一列配列用(ベクターというんですかね?)にして簡略に作りました。一列配列にすることで、Matrixからの呼び出しに面倒な計算が増えています。今では、このようにMatrixから一つづつセルを取り出すことはしません。この方法はとても時間が掛かる方法です。詳しくは、Jitterチュートリアル(Jitter における Java)を参照するとよい。



わかりやすいJava入門編 わかりやすいJava入門編

価格 : ¥ 2,940 (税込み)

自分のペースで本を読み、通過テストで自分の学習度を確認。着実にステップアップさせてゆける。プログラミングの基本の基本から解説しているので、はじめてのプログラミング学習に最適な一冊。

| | コメント (0) | トラックバック (0)