Дан треугольник с координатами (-1;0) (1;0) (0;1) Определить принадлежит ли точка (-5;5) этому треугольнику - C (СИ)
Формулировка задачи:
Помогите, пожалуйста!
Решение задачи: «Дан треугольник с координатами (-1;0) (1;0) (0;1) Определить принадлежит ли точка (-5;5) этому треугольнику»
textual
Листинг программы
#include <stdio.h>
#include <locale.h>
int main(){
setlocale(LC_ALL, "rus");
int i,k;
float trX[3];
float trY[3];
float bufx, bufy;
float dot[2];
printf("введите координаты вершин треугольника:\n ВВОДИТЬ ЧЕРЕЗ ПРОБЕЛ!!!\n\nпервая вершина (x y):");
scanf("%f %f", &trX[0], &trY[0]);
printf("вторая вершина (x y):");
scanf("%f %f", &trX[1], &trY[1]);
printf("третья вершина (x y):");
scanf("%f %f", &trX[2], &trY[2]);
printf("координаты точки (x y):");
scanf("%f %f", &dot[0], &dot[1]);
float S,S1,S2,S3;
S = 0.5*((trX[0]-trX[2])*(trY[1]-trY[2])-(trX[1]-trX[2])*(trY[0]-trY[2]));
if(S<0) S*=(-1);
S1 = 0.5*((dot[0]-trX[2])*(trY[1]-trY[2])-(trX[1]-trX[2])*(dot[1]-trY[2]));
if(S1<0) S1*=(-1);
S2 = 0.5*((trX[0]-trX[2])*(dot[1]-trY[2])-(dot[0]-trX[2])*(trY[0]-trY[2]));
if(S2<0) S2*=(-1);
S3 = 0.5*((trX[0]-dot[0])*(trY[1]-dot[1])-(trX[1]-dot[0])*(trY[0]-dot[1]));
if(S3<0) S3*=(-1);
if (S==S1+S2+S3)
printf("принадлежит треугольнику\n");
else printf("не принадлежит треугольнику\n");
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с языком программирования C.
- Установка русской локали для вывода информации на экран.
- Объявление переменных: i, k, bufx, bufy, dot, S, S1, S2, S3 и trX, trY.
- Ввод координат вершин треугольника и координат точки с помощью функции scanf.
- Вычисление площади треугольника по формуле Герона.
- Вычисление значений S1, S2 и S3, представляющих собой скалярные произведения отрезков, соединяющих вершины треугольника с искомой точкой.
- Вычисление значения S, равного сумме S1, S2 и S3.
- Проверка принадлежности точки к треугольнику по условию (S==S1+S2+S3).
- Вывод на экран соответствующего сообщения о принадлежности или непринадлежности точки к треугольнику.