bgc-c/docs/vector2-rus.md

176 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Двумерные векторы
В библиотеке есть две версии вектора:
- 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 <stdio.h>
#include <basic-geometry.h>
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 <stdio.h>
#include <basic-geometry.h>
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 <stdio.h>
#include <basic-geometry.h>
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 <stdio.h>
#include <basic-geometry.h>
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**) и будет работать с геометрическими структурами и
функциями выбранного типа.
Тем не менее, в библиотеке есть функции, которые позволяют преобразовать данные
одного типа в данные другого типа.