Код:
/*пересечения двух прямых*/
#include<stdio.h>
#include<math.h>
main(){
float t0,t1; //время
printf("Введите время t0 и t1 (t0<t1): ");
scanf("%f%f", &t0, &t1);
if(t0>t1){
printf("ERROR: t0>t1\n");
return 0;
}
//t0-t1 = время
float T = t1-t0;
//Отрезок АВ
int x1,y1; //точка А (начало)
int x2,y2; //точка В (конец)
printf("Введите точку A(x1, y1) ");
scanf("%d%d", &x1, &y1);
printf("Введите точку B(x2, y2) ");
scanf("%d%d", &x2, &y2);
int A1 = y2-y1;
int B1 = x1-x2;
int object_1 = -A1*x1-B1*y1;
//Отрезок CD
int u1,z1; //точка C (начало)
int u2,z2; //точка D (конец)
printf("Введите точку C(u1, z1) ");
scanf("%d%d", &u1, &z1);
printf("Введите точку D(u2, z2) ");
scanf("%d%d", &u2, &z2);
int C1 = z2-z1;
int D1 = u1-u2;
int object_2 = -C1*u1-D1*z1;
//Размеры объектов
float r1; //Радиус 1й
float r2; //Радиус 2й
printf("Введите Радиус 1й окружности r1: ");
scanf("%f", &r1);
printf("Введите Радиус 2й окружности r1: ");
scanf("%f", &r2);
float L1; //Размер 1го объекта
float L2; //Размер 2го объекта
float const PI = 3.14;
L1 = 2*PI*r1; //Длина 1й окружности
L2 = 2*PI*r2; //Длина 2й окружности
//для if
int f1 = A1 * u1 +B1 * z1 + object_1;
int f2 = A1 * u2 +B1 * z2 + object_1;
int f3 = C1 * x1 +D1 * y1 + object_2;
int f4 = C1 * x2 +D1 * y2 + object_2;
//находим x, y (точка пересечения 2х прямых)
float x = (-(x1*y2-x2*y1)*(u2-u1)-(u1*z2-u2*z1)*(x2-x1))/((y1-y2)*(u2-u1)-(z1-z2)*(x2-x1));
float y = ((z1-z2)*x-(u1*z2-u2*z1))/(u2-u1);
//строгое пересечение
if(f1*f2<0&&f3*f4<0){
printf("Прямые пересекаются в точке: ");
printf("x:%0.0f, y:%0.0f\n",x,y);
}
else
printf("Траектории не пересекаются\n");
//длина отрезков dl1: AB, dl2: CD
float dl1 = sqrt((y2-y1)*(y2-y1)+(x2-x1)*(x2-x1));
float dl2 = sqrt((z2-z1)*(z2-z1)+(u2-u1)*(u2-u1));
//Скорость обьектов: скорость = расстояние / время
float S_object_1 = dl1/T;
float S_object_2 = dl2/T;
//длина отрезков dl3: AP, dl4: CP
float dl3 = sqrt((y-y1)*(y-y1)+(x-x1)*(x-x1));
float dl4 = sqrt((y-z1)*(y-z1)+(x-u1)*(x-u1));
//время = расстояние / скорость
float time1 = dl3/S_object_1;
float time2 = dl4/S_object_2;
printf("A1: %d\t\tB1: %d\t\t object_1: %d\n",A1,B1,object_1);
printf("C1: %d\t\tD1: %d\t\t object_2: %d\n",C1,D1,object_2);
printf("Длина 1го отрезка [A,B]: %0.1f\nДлина 2го отрезка [C,D]: %0.1f\n",dl1,dl2);
printf("Длина 3го отрезка [A,P]: %0.1f\nДлина 4го отрезка [C,P]: %0.1f\n",dl3,dl4);
printf("Скорость 1го объекта: %0.1f\nСкорость 2го объекта: %0.1f\n",S_object_1,S_object_2);
printf("Время 1го обьекта: %0.1f\nВремя 2го обьекта: %0.1f\n",time1,time2);
printf("Длина 1й окружности: %0.2f\nДлина 2й окружности: %0.2f\n",L1,L2);
printf("[ f1: %d | f2: %d | f3: %d | f4: %d ]\n",f1,f2,f3,f4);
}
Код:
Введите время t0 и t1 (t0<t1): 3 8
Введите точку A(x1, y1) 3 7
Введите точку B(x2, y2) 3 -10
Введите точку C(u1, z1) -3-3
Введите точку D(u2, z2) 8 -3
Введите Радиус 1й окружности r1: 3
Введите Радиус 2й окружности r1: 5
Прямые пересекаются в точке: x:3, y:-3
A1: -17 B1: 0 object_1: 51
C1: 0 D1: -11 object_2: -33
Длина 1го отрезка [A,B]: 17.0
Длина 2го отрезка [C,D]: 11.0
Длина 3го отрезка [A,P]: 10.0
Длина 4го отрезка [C,P]: 6.0
Скорость 1го объекта: 3.4
Скорость 2го объекта: 2.2
Время 1го обьекта: 2.9
Время 2го обьекта: 2.7
Длина 1й окружности: 18.84
Длина 2й окружности: 31.40
[ f1: 102 | f2: -85 | f3: -110 | f4: 77 ]
вроде А и Б сделал но не могу понять как привязать длину круга которую я нашел чтоб выяснить столкнуться ли объекты или нет .
в) Будем считать, что объекты должны столкнуться, если
- возможное кратчайшее расстояние между ними меньше суммарной длины объектов И
- это расстояние будет достигнуто в момент времени, превышающий t1.