Показать сообщение отдельно
Старый 29.06.2016, 15:25   #8 (permalink)
romacool2
Новичок
 
Регистрация: 28.06.2016
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Код:
/*пересечения двух прямых*/
#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;
	}
  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;
  
  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 dl1 = fabs((y2-y1)*(y2-y1)+(x2-x1)*(x2-x1));
  float dl2 = fabs((z2-z1)*(z2-z1)+(u2-u1)*(u2-u1));
//для 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х прямых)  
  int x = (-(x1*y2-x2*y1)*(u2-u1)-(u1*z2-u2*z1)*(x2-x1))/((y1-y2)*(u2-u1)-(z1-z2)*(x2-x1));
  int y = ((z1-z2)*x-(u1*z2-u2*z1))/(u2-u1); 
//строгое пересечение  
  if(f1*f2<0&&f3*f4<0){
    printf("YES\n");
    printf("x:%d, y:%d\n",x,y);
  }
    else
      printf("NO\n"); 
//t0-t1 = время
  float T = t1-t0;
//Скорость обьектов: скорость = расстояние / время
  float S_object_1 = dl1/T;
  float S_object_2 = dl2/T;
//время = расстояние / скорость
  float time1 = dl1/S_object_1;
  float time2 = dl2/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го отрезка: %0.1f\nДлина 2го отрезка: %0.1f\n",dl1,dl2);
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("[ f1: %d | f2: %d | f3: %d | f4: %d ]\n",f1,f2,f3,f4);
}
Вот пои попытки, можете посмотреть код
Задание написать на Си) с Пролог не знаком(
romacool2 вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070