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