Нужна подфункция для проверки принадлежности точки отрезку - 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;
}