# Двумерные векторы В библиотеке есть две версии вектора: - BgcVector2FP32 - вектор одинарной точности - BgcVector2FP64 - вектор двойной точности Векторы типа BgcVector2FP32 для хранения координат использует тип **float** (тип binary32 стандарта IEEE 754). Векторы BgcVector2FP64 используют тип **double** (тип binary64 стандарта IEEE 754). Оба типа представляют собой структуры с двумя полями: **x1** и **x2**. Определение типов: typedef struct { float x1, x2; } BgcVector2FP32; typedef struct { double x1, x2; } BgcVector2FP64; Операции: - сбос состояния - указание координат - копирование - обмен - конвертация типа - получение обратного вектора ### Сброс состояния Для сброса координат в нулевое значение предлагаются следующие функции: inline void bgc_vector2_reset_fp32(BgcVector2FP32* vector); inline void bgc_vector2_reset_fp64(BgcVector2FP64* vector); Каждая из данных функции эквивалентна следующим строкам кода: vector->x1 = 0; vector->x2 = 0; В данные функции не следует передавать некорректные указатели. Значение NULL (0) в качестве параметра также считается некорректным. Пример применения: #include #include int main() { BgcVector2FP32 my_vector; bgc_vector2_reset_fp32(&my_vector); printf("x1 = %f, x2 = %f\n", my_vector.x1, my_vector.x2); return 0; } ### Указание координат Для прямого указания координат предлагаются следующие две функции: 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**) и будет работать с геометрическими структурами и функциями выбранного типа. Тем не менее, в библиотеке есть функции, которые позволяют преобразовать данные одного типа в данные другого типа.