# Двумерные векторы векторы В библиотеке есть два типа двумерных векторов: - **BgcVector2FP32** - вектор с использованием чисел с плавающей запятой одинарной точности - **BgcVector2FP64** - вектор с использованием чисел с плавающей запятой двойной точности Определения структур: ```c typedef struct { float x1, x2; } BgcVector2FP32; typedef struct { double x1, x2; } BgcVector2FP64; ``` ## Функции ### Указание координат двумерного вектора Для прямого указания координат предлагаются следующие две функции: inline void bgc_vector2_set_values_fp32(const float x1, const float x2, BgcVector2FP32* to); inline void bgc_vector2_set_values_fp64(const double x1, const double x2, BgcVector2FP64* to); Каждая из данных функции эквивалентна следующим строкам кода: vector->x1 = x1; vector->x2 = x2; В данные функции не следует передавать некорректные указатели. Значение NULL (0) в качестве параметра также считается некорректным. Пример применения: #include #include int main() { BgcVector2FP32 my_vector; bgc_vector2_set_values_fp32(-2, 7, &my_vector); printf("x1 = %f, x2 = %f\n", my_vector.x1, my_vector.x2); return 0; } ### Копирование Функции копирования позволяют Для копирования координат векторов предлагаются данные функции: inline void bgc_vector2_copy_fp32(const BgcVector2FP32* from, BgcVector2FP32* to); inline void bgc_vector2_copy_fp64(const BgcVector2FP64* from, BgcVector2FP64* to); Каждая из данных функции эквивалентна следующим строкам кода: to->x1 = from->x1; to->x2 = from->x2; В данные функции не следует передавать некорректные указатели. Значение NULL (0) в качестве параметра также считается некорректным. Пример применения: #include #include int main() { BgcVector2FP32 my_vector1, my_vector2; bgc_vector2_set_values_fp32(-2, 7, &my_vector1); bgc_vector2_copy_fp32(&my_vector1, &my_vector2); printf("x1 = %f, x2 = %f\n", my_vector2.x1, my_vector2.x2); return 0; } ### Обмен Функции обмена позволяют двум векторам одного типа обменяться значениями координат. Для обмена значениями координат векторов определены следующие функции: inline void bgc_vector2_swap_fp32(BgcVector2FP32* vector1, BgcVector2FP32* vector2); inline void bgc_vector2_swap_fp64(BgcVector2FP64* vector1, BgcVector2FP64* vector2); В данные функции не следует передавать некорректные указатели. Значение NULL (0) также считается некорректным. Пример применения: #include #include int main() { BgcVector2FP32 my_vector1, my_vector2; bgc_vector2_set_values_fp32(-2, 7, &my_vector1); bgc_vector2_set_values_fp32(10, -1, &my_vector2); bgc_vector2_swap_fp32(&my_vector1, &my_vector2); printf("Vector #1: x1 = %f, x2 = %f\n", my_vector1.x1, my_vector1.x2); printf("Vector #2: x1 = %f, x2 = %f\n", my_vector2.x1, my_vector2.x2); return 0; } ### Конвертация типа Функции конвертации типа позволяют преобразовать inline void bgc_vector2_convert_fp64_to_fp32(const BgcVector2FP64* from, BgcVector2FP32* to); inline void bgc_vector2_convert_fp32_to_fp64(const BgcVector2FP32* from, BgcVector2FP64* to); Функции библиотеки проектировались из предпосылки, что разработчик, использующий данную библиотеку, выберет один из двух типов чисел с плавающей запятой (**float** или **double**) и будет работать с геометрическими структурами и функциями выбранного типа. Тем не менее, в библиотеке есть функции, которые позволяют преобразовать данные одного типа в данные другого типа. [Назад](intro-rus.md)