Найти расстояние от заданной точки до заданного треугольника на плоскости - C (СИ)
Формулировка задачи:
Найти расстояние от заданной точки до заданного треугольника на плоскости.
Решение задачи: «Найти расстояние от заданной точки до заданного треугольника на плоскости»
textual
Листинг программы
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main()
{
double A,B,C,D,x1,x2,x3,y1,y2,y3,z1,z2,z3,nx,ny,nz;
double dist;
printf("Enter x1,y1,z1 :");
scanf("%lf,%lf,%lf",&x1,&y1,&z1);
printf("Enter x2,y2,z2 :");
scanf("%lf,%lf,%lf",&x2,&y2,&z2);
printf("Enter x3,y3,z3 :");
scanf("%lf,%lf,%lf",&x3,&y3,&z3);
printf("Enter nx,ny,nz :");
scanf("%lf,%lf,%lf",&nx,&ny,&nz);
A=y1*(z2-z3)+y2*(z3-z1)+y3*(z1-z2);
B=x1*(z3-z2)+x2*(z1-z3)+x3*(z2-z1);
C=x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2);
D=-x1*A-y1*B-z1*C;
if(A==0&&B==0&&C==0)
{
printf("error");
return 0;
}
printf("A=%.3lf,B=%.3lf,C=%.3lf,D=%.3lf\n",A,B,C,D);
dist=fabs(A*nx+B*ny+C*nz+D)/sqrt(A*A+B*B+C*C);
printf("Distance=%.3lf\n",dist);
return 0;
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы
- Определяются переменные типа double для хранения координат точек и вектора нормали
- Выводится приглашение для ввода координат барицентр и координат вершин треугольника
- Считываются значения координат с помощью функции scanf
- Вычисляются значения векторов A, B, C и D с помощью формул (A=cross(v2-v1, v3-v1), B=cross(v3-v1, v1-v2), C=cross(v1-v2, v3-v1))
- Проверяется условие, при котором все координаты равны нулю (в случае ошибки выводится сообщение
error) - Выводятся значения векторов A, B, C и D
- Вычисляется расстояние от заданной точки до треугольника по формуле dist=|(Anx+Bny+Cnz+D)/sqrt(AA+BB+CC)|
- Выводится значение расстояния
- Завершается выполнение программы