문제

저는 현재 약간의 물리학을 포함하는 프로그램을 설계하고 있습니다 (너무 화려하지 않고 서로 충돌하는 공 몇 개)

C #에서 위치를 나타내는 데 사용할 수있는 가장 정확한 데이터 유형은 무엇입니까 (불연속적인 점프 느낌없이)?

또한 t와 t + 1 사이에서 얻을 수있는 최소 시간은 얼마입니까?한 틱?

편집 : 명확화 : C #에서 가장 작은 시간 단위는 무엇입니까?[TimeSpan].Tick?

도움이 되었습니까?

해결책

.Net에서 decimal는 위치에 사용할 수있는 가장 정확한 데이터 유형입니다.위치에 대한 클래스를 작성합니다. 라코 디스

시간에 관해서는 프로세서가 1 틱보다 작은 것은 제공 할 수 없습니다.

재미있는 프로젝트 같네요!행운을 빕니다!

다른 팁

정확하지만 Decimal 데이터 유형은 수행하려는 작업에 따라 최적의 선택이 아닐 수 있습니다.일반적으로 Direct3D 및 GPU는 32 비트 부동 소수점과 3 개의 벡터 (총 96 비트)를 사용하여 x, y, z의 위치를 나타냅니다.

동일한 "세계"에서 거대한 규모 (행성)와 현미경 수준 (농구)을 모두 혼합해야하는 경우가 아니면 일반적으로 충분한 정밀도를 제공합니다.

소수를 사용하지 않는 이유는 크기 (4 배 더 큼), 속도 (크기 순서가 더 느림) 및 사용 가능한 삼각 함수 없음 (AFAIK) 일 수 있습니다.

Windows에서 QueryPerformanceCounter API함수는 가장 높은 해상도의 시계를 제공하며 QueryPerformanceFrequency 카운터의 주파수.다른 댓글에 설명 된 Stopwatch가 이것을 .net 클래스로 래핑한다고 생각합니다.

로켓 과학을하지 않는 한 소수점은 WAAAY 과잉입니다.더 정확한 위치를 제공 할 수 있지만 고정 소수점 데이터 유형이므로 float 또는 double보다 훨씬 더 작은 범위로 제한되기 때문에 반드시 더 정확한 속도 (예 : 속도)를 제공하지는 않습니다.

수레를 사용하되 정밀도가 문제가 될 경우를 대비하여 문을 열어 두어 두 배로 이동하세요.

나는 Vector 데이터 유형을 사용합니다.물리학에서와 마찬가지로 물체의 움직임을 모델링 할 때 벡터를 사용합니다. Vector2 또는 XNA 프레임 워크에서 Vector3 클래스를 사용하거나 자신의 Vector3 구조체 는 위치를 나타냅니다.Vector2는 2D 용이고 Vector3는 3D 용입니다.

TimeSpan 구조체 또는 Stopwatch 클래스는 시간 변화를 계산하는 데 가장 적합한 옵션입니다.추천해야한다면 Stopwatch를 사용하겠습니다.

문제없이 Decimal 데이터 유형을 사용할 수 있어야한다고 생각합니다.사용 가능한 정밀도가 가장 높습니다.그러나 double 데이터 유형은 괜찮습니다.

예, 틱은 제가 아는 것 중 가장 작은 것입니다 (System.Diagnostics.Stopwatch 클래스 사용).

마지막 질문을 이해하지 못합니다. 명확히 해주시겠습니까?

수정 :

아직 이해하지 못할 수도 있지만 원하는 유형 (예 : doubles)을 사용하여 시간을 나타낼 수 있습니다 (실제로 원하는 것이 물리학 문제에 대한 시간의 이산화를 나타내는 것입니다.이 경우 눈금은관련 없음).대부분의 물리 문제의 경우 복식이면 충분합니다.

진드기는 기계로 시간을 측정 할 때 얻을 수있는 최고의 정밀도입니다.

시뮬레이션의 경우 무 차원 시간 동안 십진수 / 더블 (위치와 동일한 유형)을 사용한 다음 입력 / 출력에서 의미있는 것으로 변환하는 것이 좋습니다.그렇지 않으면 물건을 움직일 때 많은 캐스트 작업을 수행하게됩니다.원하는만큼 크게 / 작게 시간 척도를 선택할 수 있기 때문에 이런 식으로 임의의 정밀도를 얻을 수도 있습니다.

Hey Juan, 저는 사용하기 쉽고 무엇보다도 필요한 모든 연산 (예 : 더하기, 곱하기, 행렬 곱하기 등)을 지원하므로 다른 여러 사람들이 제안한대로 Vector3 클래스를 사용하는 것이 좋습니다.직접 구현해야합니다. 진행 방법에 대해 의문이있는 경우 상속하고 이후 단계에서 언제든지 내부 구현을 변경하거나 vector3에서 연결을 끊을 수 있습니다.

또한 float보다 덜 정확한 것은 사용하지 마세요. 요즘 모든 프로세서는 정수보다 더 정확할만큼 충분히 빠르게 실행됩니다 (모바일 용이 아니라면 ...) 부동 소수점 이하를 사용하면 정밀도가 매우 빠르게 손실되고 특히 단일 행렬 / 쿼터니언 곱셈 이상을 사용하려는 경우 급격한 회전 및 변환이 발생합니다.

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