밀도계산 in ArcGIS

밀도계산의 방식은 Simple 방식과 Kernel 방식이 있습니다. 이 두방식에 대해 ArcGIS에서 처리된 결과 이미지는 아래와 같습니다. 첫번째는 Kernel 방식이고 두번째가 Simple 방식입니다. Simple 방식은 Kernel 방식에 비해 처리 속도가 매우 빠르지만 그 결과는 Kernel에 비해  떨어집니다. 물론 분석 대상이 되는 Point나 Polyline의 개수가 증가할 수록 그 결과의 차이는 줄어들것으로 생각됩니다. XGE에서 밀도계산 기능을 확장단위로 개발하기에 앞서 비교 기준이 되는 결과를 ArcMap에서 살펴봅니다.

밀도 개산의 가장 많은 활용처는 포인트나 폴리라인에 대해 어느 부분에 밀집되어져 있느냐를 시각적으로 효과적으로 파악할 수 있다는 점입니다. 또한 이러한 밀도 개산에 의해 생성된 Grid 데이터를 여러개를 동시에 중첩하여 여러개의 인자들에 대한 복합적인 분석에 매우 효과적으로 활용됩니다. XGE에서는 ArcGIS의 밀도 분석은 물론이고 시각적으로 어느 부분이 가장 밀집도가 높으냐라는 판단이 아니라, 정확히 이 부분이 가장 밀집도가 높다라는 “제시”까지 제공할 예정입니다. “제시”는 기본이 되는 밀도개산 기능이 잘 완료가 되면 쉽게 구현할것으로 판단됩니다.

김지원, ‘고액연봉’ 거절하고 MS·구글 애태운 천재의 귀국

마이크로소프트(MS)사의 창업자 빌 게이츠는 중학교 2학년 때부터 컴퓨터 프로그래밍으로 돈을 벌었다. 지난 2000년 서울의 한 소년도 같은 나이에 이미 회원 수 400명이 넘는 하이텔 소프트웨어 프로그래머 동호회를 책임지고 있었다.

[중략,  원문에 모든 내용이 있습니다]

“지능이 평균 이상은 되겠지만 천재라고는 절대 생각지 않아요. 다른 점이라면 뭐든 스스로 답을 찾는 게 습관이 됐을 뿐이죠.” 그는 과학고 입학 후 첫 시험에서 전체 꼴찌를 했다. “그런데 반에서 1등 하던 강남 사는 친구에게 문제의 원리를 물었더니 ‘시험에 나오지 않는다’고 말해 충격을 받았던 기억이 있어요. 늘 주어진 대로만 해오던 친구들이라 새로운 상황에선 헤매요.”

반면 그는 “이런저런 연구를 하려면 어떤 강의를 들어야 할까”를 고민했다고 한다. 덕분에 1학년 때부터 미디어 랩 등 MIT의 여러 연구소에서 교수들과 함께 연구를 할 수 있었다. 젊은 영 파워의 미래가 어디까지 이어질지 주목하는 이들이 너무나 많다.

원문 : http://news.media.daum.net/economic/industry/200711/27/chosun/v19003344.html

지난주 토요일, 지리산에서..

지리산 노고단을 가는 길은 겨울분위기이고… 내려오는 산중턱은 가을 느낌이였다. 부모님과 할머니와 함께한 여행이였다. 흐리고 안개가 많이 꼈으며 바람까지 많은 날인지라, 시간을 잘못잡은듯하였지만.. 오르는 힘든 걸음걸이로 지친 열기를 차가운 바람이 식혀주었으며, 툭… 터인 공간에서 마음만큼은 가볍기만 하였다…







STL map의 비교함수자 제공하는 코드

필요할때마다 잊는지라, 이곳에 메모해 봅니다.. ^^

#include 


using namespace std;

class Standard {
private:
	int a;
public:
	Standard(int a) {
		this->a = a;
	}

	int Get() {
		return a;
	}
};

class Value {
public:
	Standard *pStandard;
	Value(Standard *pStandard) {
		this->pStandard = pStandard;
	}
};

class CustomCompare {
public:
	bool operator()(Standard* s1, Standard* s2) const {
		return s1->Get() == s2->Get();
	}
};

int main(int argc, _TCHAR* argv[])
{
	map container;

	Standard *pStand1 = new Standard(10);
	Value *pValue1 = new Value(pStand1);
	
	Standard *pStand2 = new Standard(20);
	Value *pValue2 = new Value(pStand2);

	container[pStand1] = pValue1;
	container[pStand2] = pValue2;

	Standard *pStand3 = new Standard(20);

	printf("%d\n", container[pStand3]->pStandard->Get());

	delete pStand3;
	delete pStand1;
	delete pStand2;
	delete pValue1;
	delete pValue2;

	return 0;
}

OpenGL Shader – 32

GLSL 예제 : Texture(MultiTexture) – 3/3

원문 : http://www.lighthouse3d.com/opengl/glsl/index.php?textureMulti

멀티 텍스쳐링은 GLSL에서는 정말 쉽다. 해야할 것은 두개의 텍스쳐에 접근하는 일이 전부다. 그리고 이 장에서는 동일한 텍스쳐 좌표를 사용할 것이기 때문에 버텍스 쉐이더를 재작성하지 않고 이전 강좌의 것을 그대로 사용한다. 프레그먼트 쉐이더 또한 두개의 텍스쳐 색상을 추가하는 최소한의 변화만 있다.

varying vec3 lightDir,normal;
uniform sampler2D tex,l3d;

void main()
{
    vec3 ct,cf;
    vec4 texel;
    float intensity,at,af;
		
    intensity = max(dot(lightDir,normalize(normal)),0.0);
	
    cf = intensity * (gl_FrontMaterial.diffuse).rgb + 
         gl_FrontMaterial.ambient.rgb;
    af = gl_FrontMaterial.diffuse.a;
	
    texel = texture2D(tex,gl_TexCoord[0].st)+
            texture2D(l3d,gl_TexCoord[0].st);

    ct = texel.rgb;
    at = texel.a;
	
    gl_FragColor = vec4(ct * cf, at * af);	
}

그리고 이제, 약간 다른 특별한 것을 해보자: Glow in the Drak Effect. 이 특별한 효과는 두번째 텍스쳐를 어둠속에서 타오르는듯하게 보이는 것이다. 예를들어, 완전이 밝아졌다가 어두워지는 듯한 효과.
두 단계로 최종 색상을 다시 계산해야 하는데, 먼저 첫번째 텍스쳐를 프레그먼트 색상으로 조정된 상태의 색상을 계산하고, 이후에 두번째 텍스쳐 유닛을 강도에 기반해서 추가하는 것이다.

intensity가 0이라면, 두번째 텍스쳐가 전체적으로 완전하게 표시된다. 반대로 intensity가 1이라면, 두번째 텍스쳐를 10% 정도만 표시되도록 한다. 이런 표시를 위해 smoothStep라는 함수를 통해 구현할 것이다. 이 함수의 시그니쳐는 다음과 같다.

genType smoothStep(genType edge0, genType edge1, genType x);

만약 x<=edge0이면 결과는 0이고,  x>=edge1이면 1 그리고 edge0< x <edge1이면 Hermit 보간 연산이 수행된다. 우리의 경우 다음 함수를 호출한다.

coef = smoothStep(1.0, 0.2, intensity);

다음은 프레그먼트 쉐이더 코드이다.

varying vec3 lightDir,normal;
uniform sampler2D tex,l3d;

void main()
{
    vec3 ct,cf,c;
    vec4 texel;
    float intensity,at,af,a;
	
    intensity = max(dot(lightDir,normalize(normal)),0.0);
	
    cf = intensity * (gl_FrontMaterial.diffuse).rgb + 
             gl_FrontMaterial.ambient.rgb;
    af = gl_FrontMaterial.diffuse.a;
	
    texel = texture2D(tex,gl_TexCoord[0].st);
		
    ct = texel.rgb;
    at = texel.a;
	
    c = cf * ct;
    a = af * at;
		
    float coef = smoothstep(1.0,0.2,intensity);
    c += coef *  vec3(texture2D(l3d,gl_TexCoord[0].st));
	
    gl_FragColor = vec4(c, a);	
}