'[+++ JAVA +++]/- - Open Source'에 해당되는 글 4건

  1. 2012.11.14 스택(Stack)
  2. 2012.01.01 (2012년 첫글은!?) [Blur] 블러 구현(java)2 (2)
  3. 2011.12.20 [Blur] 블러 구현(java) (4)
  4. 2011.10.30 [자료구조] 자바로 만든 큐(Queue) (1)
2012.11.14 23:05

이번에 만든 스택은 연결 스택으로, 자료 노드들이 메모리가 허용되는한 늘어날 수 있다.














package com.flask.utils;

public class Node<T> {
	
	private Node<T> next;
	private Node<T> before;
	private T data;
	
	public Node() {
	}
	
	public Node(Node<T> before, Node<T> next) {
		connectToBefore(before);
		connectToNext(next);
	}
	
	public Node(T data) {
		setData(data);
	}
	
	public void setData(T data) {
		this.data = data;
	}
	
	public T getData() {
		return data;
	}
	
	public void connectToNext(Node<T> node) {
		next = node;
	}
	
	public void connectToBefore(Node<T> node) {
		before = node;
	}
	
	public Node<T> getNextNode() {
		return next;
	}
	
	public Node<T> getBeforeNode(){
		return before;
	}
	
	public void clearData() {
		this.data = null;
	}
	
	public void clearConnections() {
		connectToBefore(null);
		connectToNext(null);
	}
	
	public void release() {
		clearData();
		clearConnections();
	}
	
}




package com.flask.utils;

public class Stack<T> {

	Node<T> head = new Node<T>();
	Node<T> top = head;

	private int count = 0;

	public Stack() {
	}

	public void pushNode(Node<T> node) {
		node.connectToBefore(top);
		top.connectToNext(node);
		top = node;
		count++;
	}

	public void push(T data) {
		pushNode(new Node<T>(data));
	}

	public Node<T> popNode() {
		if (!isEmpty()) {
			Node<T> tmp = top;
			top = tmp.getBeforeNode();
			tmp.clearConnections();
			count--;
			return tmp;
		} else {
			return null;
		}
	}

	public T pop() {
		return popNode().getData();
	}

	public T getTop() {
		return top.getData();
	}

	public int count() {
		return count;
	}

	public Boolean isEmpty() {
		if (count() == 0) return true;
		return false;
	}

	public Stack<T> getInverse() {
		Stack<T> tmp = new Stack<T>();
		while (!isEmpty()) {
			tmp.push(pop());
		}
		return tmp;
	}

	public void print() {
		Node<T> cursor = head;
		System.out.println("============");
		while (true) {
			if (cursor.getNextNode() == null) break;
			cursor = cursor.getNextNode();
			System.out.print(cursor.getData().toString() + " ");
		}
		System.out.println("\n============");
	}

}


'[+++ JAVA +++] > - - Open Source' 카테고리의 다른 글

스택(Stack)  (0) 2012.11.14
(2012년 첫글은!?) [Blur] 블러 구현(java)2  (2) 2012.01.01
[Blur] 블러 구현(java)  (4) 2011.12.20
[자료구조] 자바로 만든 큐(Queue)  (1) 2011.10.30
Trackback 0 Comment 0
2012.01.01 19:52

집에서 너무 잉여롭게 사는듯.....물론 학교 가긴 하지만;;; 뭔가 생산적인 일을 해야할터인데....

어쨋든 전부터 구현해오던 블러를 쪼금..아주 쪼금,,,개선했다는거 외엔 별다를게 없네요. 

사실 모션블러를 만들다가 왜이렇게 잘 안되는지.....ㅠㅠ 아직 기본 블러도 모서리 부분 처리를 안해놔가지고 미완성이긴 한데....ㅠㅠ

뭔가 해보고 싶은건 많고 내 능력은 딸리고,,,,,

어쨋든, 지금까지 만든거 올립니다....ㅋ (솔직히 도움될건 별로 없다 생각... 발로 만든 설계....-_-)

(전버전에 비해 업데이트 된점 : 컬러........블러-드로우 순서 변경....블러를 클래스도 따로 분리;;)



 (포토샵으로 색깔 바꾼거 아님......단순히 색상보간시 선택한 배열이 다를뿐...)

저기서 막 형형색색이 입혀진것을 볼 수 있는데, 파티클의 속도에 따라서 색상이 바뀌도록 설정했다.

예를들면, 1번 그림과 2번 그림에서 파티클의 속도가 빠를수록 밝은 색을 띠고 느릴수록 원색에 가깝게 해뒀다.

이에 대한 코드는,
	k = p.velocity.magnitude()/10;
	if(xx < 500 && xx >= 0 && yy >= 0 && yy < 500)
		bitmapData[xx+yy*500] = 0xff000000 + util.color2Int(util.colorInterpolate(util.COLOR_RAINBOW_REDEND, k));
	}
				
중요한 부분은 k값과 colorInterpolate안의 파라미터로 있는 util.COLOR_RAINBOW_REDEND 상수이다. 실제 상수는 

public final static Color[] COLOR_RAINBOW_REDEND = {new Color(0xff0000), new Color(0xffff00), new Color(0x00ff00), new Color(0x00ffff), new Color(0x0000ff), new Color(0xff00ff), new Color(0xff0000)};

이따구로 정의되어 있다.  학교에서 공부하다가 정확히 알게된 final 로 선언해 상수로 만들고, static로 선언해 어디서든 쓸 수 있도록 했다. 
(아, 참고로 저 util 클래스는 정리가 잘 안되서 보기가 힘들듯;;; 그냥 여기저기서 쓸만한 공식이라던가 기능같은건 그냥 쳐 만들어버려서....doc도 구성 안해서 사용시엔 실제 메서드 내용을 봐야할듯...;;ㅋ)

colorInterpolate 는 색상 보간 매서드인데, 각 채널별(ARGB)로 쉬프트한뒤, 각각 다시 선형보간(보간시엔 t값을 파라미터로 받는데, [0~1]의 값을 갖도록 만들어 주었다.)을 해준다. 그런뒤, 다시 합쳐준다.(그냥 Color 객체를 만들어 줬음,ㅋ)

그래서 k값을 10으로 나눈 이유가 적절한 t값을 분포시키기 위해서 그랬다. (물론 그냥 쓰거나, 아무 다른 적절한 값을 넣어도 예쁘게 보일듯.ㅋ)



색상이야기는 이정도로 하고, 이젠 블러이야기를...



전에는 블러를 그냥 하나의 클래스에 다 꾸겨넣었다. 그래서인지 학교서 배운(..) 캡슐/응집도 를 높이기 위해 따로 클래스로 분리했다. 

이때 설계를 발로한것이 드러난다...ㅠㅠ (설계를 배워야겠는데;;)

먼저 첫번째로 그냥 utils.src 폴더에 그냥 넣어버렸다...구조화 하지 않고,,, 패키지를 따로 나누지 않고....그냥....ㅠㅠ 그래서인지 유틸 패키지내엔 별의별 클래스가 포함되게 되었다.....뭐 이클립스에선 쉽게 폴더 추가하고 넣으면 알아서 수정이 되니,,,(너무 툴의 힘을 빌리는듯...-_- 멍청한듯ㅋ)

그다음 둘째,,, 모션 블러를 추가하려니 기존에 만들어 둔 ImgProcessing 클래스 및 ImageFilter를 재활용할 수 가 없었다. 다시 수정해야 하는 작업이 필요했고, 모션블러가 제대로 동작하지 않자 저 두 클래스는 괜히 수정한것처럼 되어버렸다. 그리고 오버로딩을 거지같이 만들어두는 바람에 수정 요소가 후덜덜.......

셋째는,,,어찌됬든, 모션블러가 작동하지 않으니 패배...,,,-_-;;

일단 '어느정도'만  구현 및 구조화......했지만 일단은 올려본다....ㅋ (나중에 '오 ㅅㅂ 내가 이랬던적이 있나? ㅄ 이었내..ㅋㅋ' 하는 날이 오길 바라며...)

/*소스코드는 비상업적 용도로 사용할때 공짜.ㅋ*/

<다운로드>



(이클립스에서 작업했습니다)


'[+++ JAVA +++] > - - Open Source' 카테고리의 다른 글

스택(Stack)  (0) 2012.11.14
(2012년 첫글은!?) [Blur] 블러 구현(java)2  (2) 2012.01.01
[Blur] 블러 구현(java)  (4) 2011.12.20
[자료구조] 자바로 만든 큐(Queue)  (1) 2011.10.30
Trackback 0 Comment 2
  1. Favicon of http://duhocvui.net/du-hoc-han-quoc BlogIcon du hoc han quoc 2012.01.19 18:49 신고 address edit & del reply

    고마워요, 좋은 하루 소원

  2. Favicon of http://powerbookmarking.info/story.php?id=12562 BlogIcon website 2012.04.05 13:42 신고 address edit & del reply

    도최 이어트서6g가 량했는

2011.12.20 17:39
[Blur]
블링블링...(?)

 
원래 늣풀님의 포스팅(플래시 버전)을 보고 언젠가 해봐야지 한게 오늘와서야 (java)구현;;
(자료 :  http://www.jhlabs.com/ip/blurring.html 자바를 이용한 이미지프로세싱 관련해서 주옥같은 글과 소스코드들이 있다.) 

 위 사이트에 보면 블러도 상당히 여러가지가 있다는걸 알 수 있다. 
예를들어, 제일 간단한 box블러, 가우시안블러,  렌즈블러, 모션블러 등등등,,,(이거, 다~~~ 포토샵에 있는 바로 그것들이다.)

차후에.,,, 나머지들을 구현해보기로 하고 오늘 구현한 것은 제일 기본적인 Box 블러다. 요건 그냥 단순히 박스처럼 각 셀마다 똑같은 값이 들어간다. 바로 아래그림처럼 말이다.

제일 간단한 형태의 박스 블러(1) 
그 다음 스텝의 박스 블러(2)
//내가 구현한거는 4x4 가 없다(그니까 짝수..)  홀수로 올라가며 3x3, 5x5, 7x7 순으로 올라가는데, 이유는 중심 셀이 있어야 그것을 중심으로 해서 계산이 되기 때문이라 생각하고 이렇게 설계를 함..


 플래시의 내장 블러는 어떤 블러인지는 모르겠지만 박스 블러는 아닌것 같고 아마 박스 블러를 개량한 것같다.
(가우스함수 처럼 종모양까진 아니더라도 어느정도 원형으로 분포 시킨?) 

제일 기본 박스블러다 보니 이름처럼 박스가 보인다.

노란원으로 친 부분을 보면 박스형 Threshold가 형성된것을 관찰할 수 있다.
(아니, 어쩌면 어디선가 잘못 했을 수도 있고..) 

 

이하 내용은 갤러리와 함께 소스코드 동봉.ㅋ 

 



<소스 보기>

더보기

  
소스코드 봐도 유용한건 별로 없을듯..;; 그래서 소스 파일 동봉....;;
(MIT 라이센스하 배포) 

 

'[+++ JAVA +++] > - - Open Source' 카테고리의 다른 글

스택(Stack)  (0) 2012.11.14
(2012년 첫글은!?) [Blur] 블러 구현(java)2  (2) 2012.01.01
[Blur] 블러 구현(java)  (4) 2011.12.20
[자료구조] 자바로 만든 큐(Queue)  (1) 2011.10.30
Trackback 0 Comment 4
  1. Favicon of http://www.airjordan3s.com BlogIcon Jordan 3 2011.12.26 17:30 신고 address edit & del reply

    허벅지에 배치 손을 교차 다리 자세로 앉아. 혀를 그리기 및 오프닝처럼 튜브를 만들기 위해 양쪽에서 호스를 감아. 당신의 폐에 공기가 가득 아르까지 입으로 흡입. 당신의 코를 통해 배출되기 전에 입을 닫고 언제에 대한 숨 참으세요.

  2. Favicon of http://www.thecoachoutlet2012.com BlogIcon coach outlet 2011.12.26 17:33 신고 address edit & del reply

    それらは、Äôreも同様に硬化するように乾燥させることができるように許可されている場合は除去が難しいので、それはタイムリーに汚れを一掃するために重要です。

  3. Favicon of http://namthaibinhduong.edu.vn BlogIcon du hoc my 2012.02.02 10:52 신고 address edit & del reply

    이 사이트 색상이 멋진이며 작업은 또한 좋은 그리고 난 정말 여기 지식 양식 많아

  4. Favicon of http://namthaibinhduong.edu.vn BlogIcon du hoc uc 2012.02.02 10:56 신고 address edit & del reply

    나는 이러한 놀라운과 뛰어난 사이트를 방문하는 것은 매우 기쁘게 생각합니다, 나는 완전히 그것을 즐겼다.

2011.10.30 17:48
[자료구조]
큐 (Queue)


부대에서 자료구조에 관한 책을 잠깐 봤었는데, 몇몇 자료구조중 내가 써먹을 곳이 있어서 하나 구현해봤다.

아직 자료구조를 공부한게 아니고 추상적으로 '뭐 이런이런 개념..' 으로만 알고 있어서 실사용에는 뭔가 부족할것 같다.

일단, 구현한건 큐인데, 구현한 이유가, 자바에서 fps 표시를 할때 숫자의 변동이 심해서 몇인지 잘 보기 어렵다. 따라서 대략 60개 정도의 fps를 가져오고 이넘의 평균값을 표시하는것으로 했다.
(구현한 fps 측정이 허접하기 때문일 수 도 있지만;;; : 단순히 1프레임당 시스템 숫자 변동폭의 역수를 취해주는 방법으로 계산했음..;;) 


자주하는 게임인 카운터스트라이크 : 소스에 보면, fps를 표시하는 방법이 2개가 있다.  (net_ 제외하고.)

cl_showfps 1 과  
cl_showfps 2 인데, 이 둘의 차이점으론, 

1일땐 순간의 fps를 측정, 2일땐 평균값? 대충 0.5초간의 평균값을 말해주는것 같다. 자세히 보진 않았지만..ㅋ


따라서, 보기 편한것은 2일때가 되겠다. (위에서 적었듯이, 1은 변동이 심해서 무슨 숫자인지 보기 힘듬.) 

그래서 큐를 이용해서 구했다. (아, 내가 만든건 선형 큐)


큐의 특성? 은 FIFO(퍼스트 인 퍼스트 아웃) 라고들 하는데 그러니깐 먼저 들어간 사람이 먼저 나온다. 즉 줄 서서 기다릴때랑 똑같다.

그래서 fps를 계산할때도 먼저 들어간 값(오래된 값)먼저 지운다(dequeue). 가 되겠다.

그래서 실시간으로 갱신이 되지만, 쉽게 숫자를 인식 할 수 있는 법위인.. 뭐 그렇게 생각 할 수 있겠다.

나중에 스택을 구현해 보겠지만, 큐 구현이 맨땅에 헤딩하는식으로 만들어서 뭔가 좀 병맛이다...ㅠㅠ
(객체를 넣을때는 상관이 없는데, 객체를 불러와서 사용할땐, Object 타입이라서 다루기가 짜증난다. 예를들면, 숫자를 담아두었는데, 전체 데이터에 엑세스 할때 Object 라서 double 형 따위로 쉽게 변환이 안된다는것..

그래서 꼬꼼수로 toString 하고 Double 클래스의 valueOf로 다시 값을 읽어들이고...-_- 멍청한 짓하는건가.ㅋ 아님 자바로 이걸 만든다는게 좀 이상한건가;; C의 포인터같은게 없어서 뭔가 꼼수로 만든것 같다..ㅋ)


어쨋든 자바를 배우게 되면 다시한번 짜봐야 겠다.

일단, 코드..ㅋ

package utils;

import java.util.ArrayList;

public class Queue {
	
	protected int size;
	protected Object data[];
	protected int cur;
	
	
	public Queue(int $size){
		size = $size;
		data = new Object[$size];
		cur = $size-1;
		inits();
	}
	
	protected void inits(){
		int i=0;
		for(;i<size;i++){
			data[i] = null;
		}
	}
	
	public void initializeWith(Object init_value){
		for(int i=0;i<size;i++){
			data[i] = init_value;
		}
	}
	
	public Object enQueue(Object o){
		Object temp = data[cur];
		data[cur] = o;
		if(cur<=0) cur = size-1;
		else cur--;
		return temp;
	}
	
	public Object deQueue(){
		Object temp = data[cur];
		data[cur] = null;
		if(cur<=0) cur = size-1;
		else cur--;
		return temp;
	}
	
	public int getSize(){
		return size;
	}
	
	public Object[] getData(){
		return data.clone();
	}
	
	public void printData(){
		trace(data);
	}
	
	protected void set_cur(){
		cur--;
		if(cur<0) cur = size-1;
	}
	
	protected static void trace(Object ...args){
		int l = args.length-1, i=l;
		for(;i>0;i--){	System.out.print(args[i]+", ");	}
		System.out.println(args[0]);
	}
}

'[+++ JAVA +++] > - - Open Source' 카테고리의 다른 글

스택(Stack)  (0) 2012.11.14
(2012년 첫글은!?) [Blur] 블러 구현(java)2  (2) 2012.01.01
[Blur] 블러 구현(java)  (4) 2011.12.20
[자료구조] 자바로 만든 큐(Queue)  (1) 2011.10.30
Trackback 0 Comment 1
  1. Favicon of http://estellesiahome.tistory.com BlogIcon 에스텔시아 2011.11.03 15:45 신고 address edit & del reply

    호오...자료구조 공부 열심히 해야겠네 ㅇㅅㅇ;;



티스토리 툴바