Нужна подфункция для проверки принадлежности точки отрезку - 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д