소스 검색

Fixed bug 2245 - add SDL_acos and SDL_asin

Sylvain

Here's some code to add arc cosine, and arc sin functions to SDL_stdlib.c
There are plainly written using SDL_atan.
Sam Lantinga 11 년 전
부모
커밋
e4146267fa
2개의 변경된 파일28개의 추가작업 그리고 0개의 파일을 삭제
  1. 2 0
      include/SDL_stdinc.h
  2. 26 0
      src/libm/s_atan.c

+ 2 - 0
include/SDL_stdinc.h

@@ -340,6 +340,8 @@ extern DECLSPEC int SDLCALL SDL_vsnprintf(char *text, size_t maxlen, const char
 #endif
 #endif
 
+extern DECLSPEC double SDLCALL SDL_acos(double x);
+extern DECLSPEC double SDLCALL SDL_asin(double x);
 extern DECLSPEC double SDLCALL SDL_atan(double x);
 extern DECLSPEC double SDLCALL SDL_atan2(double x, double y);
 extern DECLSPEC double SDLCALL SDL_ceil(double x);

+ 26 - 0
src/libm/s_atan.c

@@ -112,3 +112,29 @@ double atan(double x)
 	}
 }
 libm_hidden_def(atan)
+
+double SDL_acos(double val)
+{
+    double result;
+    if (val == -1.0) {
+        result = M_PI;
+    } else {
+        result = SDL_atan(SDL_sqrt(1.0 - val * val) / val);
+        if (result < 0.0)
+        {
+            result += M_PI;
+        }
+    }
+    return result;
+}
+
+double SDL_asin(double val)
+{
+    double result;
+    if (val == -1.0) {
+        result = -(M_PI / 2.0);
+    } else {
+        result = (M_PI / 2.0) - SDL_acos(val);
+    }
+    return result;
+}