도스시절 Turbo C 로 부터 시작한 C/C++ 사용은 윈도우즈 10을 사용하는 오늘날까지도 계속되고 있다. 뭐, 거창하게 윈도우용 GUI 프로그래밍을 하는 것은 아니고 여러가지 모델링/시뮬레이션 등을 할 때 스크립트 언어 식으로 간단한 시뮬레이션, 데이터 가공 등의 목적으로 사용하는 것이기에 굳이 무거운 비주얼 스튜디오 등의 IDE를 사용할 것도 없이 옛 EditPlus 2.1 에 무료로 풀어준 Borland C++ 5.5 커맨드라인 컴파일러 연결해서 그냥 몇줄 끄적이는 정도이다. 아쉬운 점은 그나마 유용하게 잘 써먹던 BC5.5 에 딸려오는 문법 Help(EditPlus 에서 Ctrl-5 를 하면 현재 커서가 가 있는 해당 함수에 대한 문법을 보여준다)가 너무 옛 HLP 포맷이어서 더이상 Win10에서 지원을 하지 않는다는 점 정도... (Win7 까지는 패치가 있어서 겨우 쓸 수 있었다) 게다가 문법이 너무 옛 문법이어서 제대로 C/C++을 쓰려면 아무래도 mingw 등을 설치하고 Geany 에디터에 연결해서 사용하는 것이 나은 것 아닌가 싶기는 하지만, 워낙 익숙한 문법에 익숙한 에디터라 바꾸기가 쉽지 않다.
어쨌거나 나 자신만을 위해 자주 써 먹는 직접 만든 몇몇 유틸리티 함수들이 있기에 기록으로 남겨 둬 본다.
#include <iostream>
#include <fstream>
#include <cstdio>
#include <cstdlib>
#include <string>
#include <cmath>
using namespace std;
const double rad = 3.141592653/180.;
const double eps = 1.0e-5;
double random_d(double degreerandom)
{
return (double)rand() / (double)RAND_MAX * degreerandom;
}
int RandINT0(int RANGE_MIN, int RANGE_MAX)
{
int ret= int( (double)rand() / (double)RAND_MAX * (RANGE_MAX - RANGE_MIN + 1) + RANGE_MIN );
if (ret > RANGE_MAX) ret = RANGE_MAX;
if (ret < RANGE_MIN) ret = RANGE_MIN;
return ret;
}
bool InCircle(double x, double y, double r)
{
if (sqrt(x*x+y*y)<r)
return true;
else
return false;
}
bool InRange(double x, double v1, double v2) // [v1, v2)
{
if ((x>=v1) && (x<v2)) return true;
else return false;
}
bool InRectangle(double x, double y, double wx1, double wy1, double wx2, double wy2)
{
return (InRange(x,wx1,wx2) && InRange(y,wy1,wy2));
}
double FakeErrFn(double x, double x0, double w, double p) // [x0-w,x0+w]:s-curve, x<x0-w:-1, x>x0+w;+1
{
double ret = 0;
if (x<x0-w)
{
ret = -1;
}
else if (x>x0+w)
{
ret = +1;
}
else
{
double x1=(x-x0+w)/w; // x1=0~2
if (x1<=1)
{
ret = pow(x1, p)-1;
}
else // x1=1~2
{
x1=2-x1;
ret = -pow(x1, p)+1;
}
}
return ret;
}
마지막 것은 일종의 가짜 err function 같은 것인데 간혹 경계를 기준으로 두 물리량이 자연스럽게 섞여 들어가는 (blending?) 것을 구현하고자 할 때 일종의 섞이는 확률을 결정하는 S 자 형태의 분포 함수로 써먹는다. 경계에서 섞여 들어가는 속도(?)는 커브의 기울기가 결정하는 데 이것은 p 값 (>1, 보통은 2 이상) 으로 조절 가능하다. 아래 그림이 그 예를 보여준다.
'Coding > VB C C++' 카테고리의 다른 글
vb.net 2012 setup package creation (0) | 2017.05.20 |
---|---|
fastest way to append an item to an array (0) | 2016.05.19 |
use System.Numerics (0) | 2016.02.19 |
bitmap, picturebox, pixel color, image overlay, ... (0) | 2016.02.17 |
structure 변수의 내용 복사 (?) (0) | 2016.02.12 |