Нужна подфункция для проверки принадлежности точки отрезку - C (СИ)
Формулировка задачи:
Добрый день,нужна подфункция для проверки принадлежности точки отрезку на прямой отрезок задан 2 точками,значения хранятся в структуре vec в x1,y1,z1 и x2,y2,z2.Функция должна возвращать 1 или 0.Помогите с написанием на Си или хотя бы с формулой
Решение задачи: «Нужна подфункция для проверки принадлежности точки отрезку»
textual
Листинг программы
- struct vec
- {
- float x1;
- float y1;
- float z1;
- float x2;
- float y2;
- float z2;
- };
- stuct point
- {
- float x;
- float y;
- float z;
- }
- int check (vec v, point p)
- {
- float kx;
- float ky;
- float kz;
- float t;
- if (v.x2==v.x1)
- {
- kx=0.0f;
- }
- else
- {
- kx=1.0f/(v.x2-v.x1);
- }
- if (v.y2==v.y1)
- {
- ky=0.0f;
- }
- else
- {
- ky=1.0f/(v.y2-v.y1);
- }
- if (v.z2==v.z1)
- {
- kz=0.0f;
- }
- else
- {
- kz=1.0f/(v.z2-v.z1);
- }
- if ((v.x2==v.x1)&&(v.y2==v.y1)&&(v.z2==v.z1))
- {
- if ((p.x==v.x1)&&(p.y==v.y1)&&(p.z==v.z1))
- {
- return 1;
- }
- return 0;
- }
- if ((fabs(v.x2-v.x1)>=fabs(v.y2-v.y1))&&(fabs(v.x2-v.x1)>=fabs(v.z2-v.z1))
- {
- t=(p.x-v.x1)*kx;
- if (v.y2!=v.y1)
- {
- if (((p.y-v.y1)*ky)!=t)
- {
- return 0;
- }
- }
- else
- {
- if (p.y!=v.y1)
- {
- return 0;
- }
- }
- if (v.z2!=v.z1)
- {
- if (((p.z-v.z1)*kz)!=t)
- {
- return 0;
- }
- }
- else
- {
- if (p.z!=v.z1)
- {
- return 0;
- }
- }
- return 1;
- }
- if ((fabs(v.y2-v.y1)>=fabs(v.x2-v.x1))&&(fabs(v.y2-v.y1)>=fabs(v.z2-v.z1))
- {
- t=(p.y-v.y1)*ky;
- if (v.x2!=v.x1)
- {
- if (((p.x-v.x1)*kx)!=t)
- {
- return 0;
- }
- }
- else
- {
- if (p.x!=v.x1)
- {
- return 0;
- }
- }
- if (v.z2!=v.z1)
- {
- if (((p.z-v.z1)*kz)!=t)
- {
- return 0;
- }
- }
- else
- {
- if (p.z!=v.z1)
- {
- return 0;
- }
- }
- return 1;
- }
- t=(p.z-v.z1)*kz;
- if (v.x2!=v.x1)
- {
- if (((p.x-v.x1)*kx)!=t)
- {
- return 0;
- }
- }
- else
- {
- if (p.x!=v.x1)
- {
- return 0;
- }
- }
- if (v.y2!=v.y1)
- {
- if (((p.y-v.y1)*ky)!=t)
- {
- return 0;
- }
- }
- else
- {
- if (p.y!=v.y1)
- {
- return 0;
- }
- }
- return 1;
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д