Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.07.2011, 12:37   #1
Crassus
Новичок
Джуниор
 
Регистрация: 27.07.2011
Сообщений: 1
По умолчанию Два отрезка

Добрый день. Помогите переделать задачу, а то не воспринимает у меня тип double на компиляторе, чем его можно заменить. Задача заключается в том что даны координаты двух отрезков x1,y1 x2,y2 и x3,y3 x4,y4, надо найти координату точки пересечения.


Код:
#include <stdio.h>
#include <float.h>
#include <math.h>
 
int segment_intersection(
        double x1, double y1, double x2, double y2, /* 1st segment */
        double x3, double y3, double x4, double y4, /* 2nd segment */
        double *xi, double *yi) /* intersection point */
{
    double dx1, dx2, dy1, dy2, D, t;
 
    dx1 = x2 - x1;
    dy1 = y2 - y1;
    dx2 = x4 - x3;
    dy2 = y4 - y3;
    
    D = dx2 * dy1 - dx1 * dy2;
    
    t = dx1 * (y3 - y1) - dy1 * (x3 - x1);
    if (D*t < 0 || fabs(t) > fabs(D))
        return 0; /* No intersection */
 
    t = dx2 * (y3 - y1) - dy2 * (x3 - x1);
    if (D*t < 0 || fabs(t) > fabs(D))
        return 0; /* No intersection */
    
    if (fabs(D) < DBL_MIN)
        return -1; /* Unknown */
 
    t /= D;
    *xi = t*dx1+x1;
    *yi = t*dy1+y1;
 
    return 1; /* One intersection */
}
 
int main(void)
{
	double x1,x2,x3,x4,y1,y2,y3,y4,xi,yi;
printf("Vvedite koordinaty linni 1 \n");
        printf("x1 = "); scanf("%lf",&x1);
        printf("y1 = "); scanf("%lf",&y1);
        printf("x2 = "); scanf("%lf",&x2);
        printf("y2 = "); scanf("%lf",&y2);
printf("Vvedite koordinaty linni 2 \n");
        printf("x3 = "); scanf("%lf",&x3);
        printf("y3 = "); scanf("%lf",&y3);
        printf("x4 = "); scanf("%lf",&x4);
        printf("y4 = "); scanf("%lf",&y4);
  
 
    switch (segment_intersection(x1, y1, x2, y2, x3, y3, x4, y4, &xi, &yi))
    {
        case 1:
            printf("Intersection point: (%g, %g)\n", xi, yi);
            break;
        case 0:
            printf("Line segments has not intersection\n");
            break;
        default:
            printf("Unknown\n");
    }
 
    return 0;
}

Последний раз редактировалось Crassus; 27.07.2011 в 21:38.
Crassus вне форума Ответить с цитированием
Старый 27.07.2011, 23:28   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Так таки и не воспринимает? Ну попробуйте тогда заменить на float. Что у вас за компилятор такой?
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 28.07.2011, 03:15   #3
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

список ошибок в студию.
onewho вне форума Ответить с цитированием
Старый 28.07.2011, 08:39   #4
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,327
По умолчанию

Я у себя проверил, всё работает:

Vvedite koordinaty linni 1
x1 = 3.5
y1 = 0
x2 = 1
y2 = 5
Vvedite koordinaty linni 2
x3 = 0
y3 = 0
x4 = 4
y4 = 3
Intersection point: (2.54545, 1.90909)
8Observer8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Два одномерных массива A и B. Сформировать два новых массива. Паскаль. Где ошибка в коде? Tomny Помощь студентам 1 27.03.2011 16:47
3 отрезка и 3 треугольника Айдар Помощь студентам 8 10.09.2009 22:45
Найти найменший прямоугольник,который описывает два заданых отрезка мукуль Помощь студентам 2 21.02.2009 17:43
Движение окружности и отрезка. Ev@ngel Компоненты Delphi 0 18.04.2008 22:16
два TMediaPlayer и два AVI-файла zeleniy Компоненты Delphi 0 01.06.2007 14:14