친구가 임의의 위치와 임의의 크기의 원 안에만 점을 찍고 싶다고 해서 만든 함수 입니다.

함수의 첫 번째 인자는 원의 중심 위치고 두 번째는 반지름, 세 번째는 점의 크기입니다.

랜덤 함수로는 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 );
}






동영상 입니다.

하얀색 원은 편의상 그린 원 입니다



이건 원과 원 사이에만 점 찍기 입니다.

+ Recent posts