친구가 임의의 위치와 임의의 크기의 원 안에만 점을 찍고 싶다고 해서 만든 함수 입니다.
함수의 첫 번째 인자는 원의 중심 위치고 두 번째는 반지름, 세 번째는 점의 크기입니다.
랜덤 함수로는 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 );
}
![](https://t1.daumcdn.net/cfile/tistory/260D2E3C5407091511)
동영상 입니다.
하얀색 원은 편의상 그린 원 입니다
이건 원과 원 사이에만 점 찍기 입니다.