문제

C#에서 PI (3.1415 ...)와 함께 일해야했기 때문에 Math.pi를 사용하여 값을 얻었습니다. 보통 나는 단지 값과 같은 값을 사용합니다 Math.PI/2.0 또는 2.0*Math.PI, 그러나 지금은 XNA가 MathHelper 클래스를 제공한다는 것을 알았습니다. 이것에 대한 좋은 점은 내가 전화 할 수 있다는 것입니다 MathHelper.PiOver2 그리고 MathHelper.TwoPi, 따라서 매우 사소한 단계를 훨씬 더 사소하게 만듭니다. ;-)

이 두 클래스가 상호 교환 가능하다고 생각했지만 Math.PI/2.0 != MathHelper.PiOver2. 나는 이것이 왜 그런지 연구하려고 노력했지만 아무것도 찾지 못했습니다. 그래서 나는 여기서 운을 시험해 볼 것이라고 생각했습니다. PI 사용과 관련하여 수학 클래스와 MathHelper 클래스 사이에 차이가 있습니까? 하나는 다른 하나보다 선호됩니까? 아니면 단지 충분히 혼자 남겨두고 프로그램 전체에서 일관되게 하나를 사용해야합니까?

도움이 되었습니까?

해결책

그들은 어떻게 평등하지 않습니까? 그들이 충분히 가까이 있다면, 이것은 부동 소수점으로 평등을 테스트하는 것이 거의 불가능하다는 전통적인 문제 일 수 있습니다.

또한 그들은 같은 유형입니까? 내 의견은 대부분의 게임 계산이 플로트로 이루어졌으며, 수학 으로서는 두 배가 될 것입니다.

편집하다: MathHelper는 실제로 플로트를 사용합니다

다른 팁

숫자를 찾으십시오 :

3,14159265358999000000000000000 // math.pi

3,1415930000000000000000000000000 // MathHelper.pi

3,1415926535897932384626433832795 // pi Windows Calc


1,570796326794900000000000000 // math.pi / 2

1,570796370506290000000000000 // mathHelper.piover2

1,5707960000000000000000000000000 // MathHelper.pi / 2

1,5707963267948966192313216916398 // pi / 2 Windows Calc


문제의 설명 : 정확도 손실

최고의 pi / 2 = math.pi / 2

최고의 PI/2는 Math.pi/2가 아닙니다!

게임 개발에서 Math.pi 상수를 사용하지 않으면 정확도 손실은 무시할 수 있습니다. 게임 객체의 움직임의 차이는 보이지 않습니다. 성능이 더 중요합니다. MathHelper.piover2를 사용하면 더블 디비전과 두 배의 플로트 변환을 절약 할 수 있습니다. 이것은 도움이 거의없는 것처럼 보이지만 차이가 중요한 계산 집약적 문제 (입자 시스템)가 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top