친구가 임의의 위치와 임의의 크기의 원 안에만 점을 찍고 싶다고 해서 만든 함수 입니다.
함수의 첫 번째 인자는 원의 중심 위치고 두 번째는 반지름, 세 번째는 점의 크기입니다.
랜덤 함수로는 C++11의 random헤더에 있는 random_device와 mt19937_64를 사용 했습니다.
원 안에만 점을 찍는 이유는 포탄이나 탄알이 조준 한 곳에 안 맞고 오차가 있기 때문입니다.
서든어택이나 AVA 등의 FPS 게임 해보신 분들은 잘 아실듯요.
※함수
void CFigure::DrawRandomPoint2D( const POINT ptPos, const float nRadius, const float ptSize /*= 2.0f*/ ) const { POINT ptPoint; //랜덤 함수 std::random_device rn; //시드 값 std::mt19937_64 rnd( rn() ); //random_device를 시드 값으로 하여 초기화 //랜덤의 범위를 0~360 범위 내에서 지정 std::uniform_real_distribution<float> nDist( 0.0f, 360.0f ); float fTempDegree = nDist( rnd ); //반지름의 범위를 0에서 입력받은 값 범위 내에서 지정 std::uniform_real_distribution<float> fDist( 0.0f, nRadius ); float fTempRadius = fDist( rnd ); //랜덤으로 뽑은 각과 반지름으로 점 찍을 위치 계산 ptPoint.x = _SCAST( long, cos( fTempDegree * DEG2RAD ) * fTempRadius ); ptPoint.y = _SCAST( long, sin( fTempDegree * DEG2RAD ) * fTempRadius ); //입력 받은 점 기준으로 ptPoint.x += ptPos.x; ptPoint.y += ptPos.y; this->DrawPoint2D( ptPoint, ptSize ); }
동영상 입니다.
하얀색 원은 편의상 그린 원 입니다
이건 원과 원 사이에만 점 찍기 입니다.
'예제 모음 > C/C++' 카테고리의 다른 글
[C언어] 두 점 사이의 거리 구하기 (0) | 2015.12.02 |
---|---|
[C++11] 중복없는 로또 프로그램2 (2) | 2015.11.29 |
[C++11] 중복없는 로또 프로그램 (6) | 2015.11.27 |
[C언어] rand 함수를 이용한 로또 프로그램 (1) | 2014.04.08 |
[C언어] 재귀 함수 - 10진수 -> 2진수 변환 (1) | 2014.03.20 |
[C언어] 소수점 특정 자릿수 반올림하기 - ROUND 함수 (0) | 2014.03.14 |
[C언어] 어떤 수 x가 2의 n승인지 판별하는 함수 (0) | 2014.03.13 |