Dmitry Telenkov 3 дней назад
Родитель
Сommit
53ce4644e4
8 измененных файлов с 148 добавлено и 0 удалено
  1. 22 0
      c/static_lib/2d.c
  2. 25 0
      c/static_lib/3d.c
  3. 49 0
      c/static_lib/geometry.h
  4. 14 0
      c/static_lib/main.c
  5. 27 0
      c/static_lib/trigon.c
  6. BIN
      c/test/main.exe
  7. 11 0
      c/test/sleep.c
  8. BIN
      c/test/sleep.exe

+ 22 - 0
c/static_lib/2d.c

@@ -0,0 +1,22 @@
+#include <math.h>
+
+#include "geometry.h"
+
+cartesian_pos_2d_t convert_to_2d_cartesian_pos(
+        const polar_pos_2d_t* polar_pos) {
+    cartesian_pos_2d_t result;
+    result.x = polar_pos->length * cos_deg(polar_pos->theta);
+    result.y = polar_pos->length * sin_deg(polar_pos->theta);
+    return result;
+}
+
+polar_pos_2d_t convert_to_2d_polar_pos(
+        const cartesian_pos_2d_t* cartesian_pos) {
+    polar_pos_2d_t result;
+    result.length = sqrt(cartesian_pos->x * cartesian_pos->x +
+            cartesian_pos->y * cartesian_pos->y);
+    result.theta =
+        to_degree(atan(cartesian_pos->y / cartesian_pos->x));
+    return result;
+}
+

+ 25 - 0
c/static_lib/3d.c

@@ -0,0 +1,25 @@
+#include <math.h>
+
+#include "geometry.h"
+
+cartesian_pos_3d_t convert_to_3d_cartesian_pos(
+        const polar_pos_3d_t* polar_pos) {
+    cartesian_pos_3d_t result;
+    result.x = polar_pos->length *
+        sin_deg(polar_pos->theta) * cos_deg(polar_pos->phi);
+    result.y = polar_pos->length *
+        sin_deg(polar_pos->theta) * sin_deg(polar_pos->phi);
+    result.z = polar_pos->length * cos_deg(polar_pos->theta);
+    return result;
+}
+
+polar_pos_3d_t convert_to_3d_polar_pos(
+        const cartesian_pos_3d_t* cartesian_pos) {
+    polar_pos_3d_t result;
+    result.length = sqrt(cartesian_pos->x * cartesian_pos->x +
+            cartesian_pos->y * cartesian_pos->y +
+            cartesian_pos->z * cartesian_pos->z);
+    result.theta = to_degree(acos(cartesian_pos->z / result.length));
+    result.phi = to_degree(atan(cartesian_pos->y / cartesian_pos->x));
+    return result;
+}

+ 49 - 0
c/static_lib/geometry.h

@@ -0,0 +1,49 @@
+#ifndef __GEOMETRY_H
+#define __GEOMETRY_H
+
+#define PI 3.14159265359
+
+typedef struct {
+    double x;
+    double y;
+} cartesian_pos_2d_t;
+
+typedef struct {
+    double length;
+    double theta;
+} polar_pos_2d_t;
+
+typedef struct {
+    double x;
+    double y;
+    double z;
+} cartesian_pos_3d_t;
+
+typedef struct {
+    double length;
+    double theta;
+    double phi;
+} polar_pos_3d_t;
+
+double to_radian(double reg);
+double to_degree(double rad);
+
+double cos_deg(double deg);
+double acos_deg(double deg);
+
+double sin_deg(double deg);
+double asin_deg(double deg);
+
+cartesian_pos_2d_t convert_to_2d_cartesian_pos(
+        const polar_pos_2d_t* polar_pos);
+
+polar_pos_2d_t convert_to_2d_polar_pos(
+        const cartesian_pos_2d_t* cartesian_pos);
+
+cartesian_pos_3d_t convert_to_3d_cartesian_pos(
+        const polar_pos_3d_t* polar_pos);
+
+polar_pos_3d_t convert_to_3d_polar_pos(
+        const cartesian_pos_3d_t* cartesian_pos);
+
+#endif

+ 14 - 0
c/static_lib/main.c

@@ -0,0 +1,14 @@
+#include <stdio.h>
+
+#include "geometry.h"
+
+int main(int argc, char** argv) {
+    cartesian_pos_2d_t cartesian_pos;
+    cartesian_pos.x = 100;
+    cartesian_pos.y = 200;
+    polar_pos_2d_t polar_pos =
+        convert_to_2d_polar_pos(&cartesian_pos);
+    printf("Polar Position: Length: %f, Theta: %f (deg)\n",
+            polar_pos.length, polar_pos.theta);
+    return 0;
+}

+ 27 - 0
c/static_lib/trigon.c

@@ -0,0 +1,27 @@
+#include <math.h>
+
+#include "geometry.h"
+
+double to_radian(double deg) {
+    return (PI * deg) / 180;
+}
+
+double to_degree(double rad) {
+    return (180 * rad) / PI;
+}
+
+double cos_deg(double deg) {
+    return cos(to_radian(deg));
+}
+
+double acos_deg(double deg) {
+    return acos(to_radian(deg));
+}
+
+double sin_deg(double deg) {
+    return sin(to_radian(deg));
+}
+
+double asin_deg(double deg) {
+    return asin(to_radian(deg));
+}

BIN
c/test/main.exe


+ 11 - 0
c/test/sleep.c

@@ -0,0 +1,11 @@
+#include <stdio.h>
+#include <unistd.h>
+
+int main()
+{
+    printf("#\n");
+    sleep(3);
+    printf("+\n");
+    sleep(3);
+    return 0;
+}

BIN
c/test/sleep.exe