Форум программистов, компьютерный форум CyberForum.ru

Пересечение прямых - C++

Восстановить пароль Регистрация
 
Militer
1 / 1 / 0
Регистрация: 12.03.2013
Сообщений: 44
20.05.2013, 18:21     Пересечение прямых #1
Не могу сделать так,чтобы находил пересечения двух прямых(n штук) и выводил координаты пересечении.
Вот что вышло.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include "stdafx.h"
#include "stdio.h"
#include "math.h"
struct prim { float a; float b; float c;};
struct point { float x; float y;};
point peres (prim p1, prim p2)
{ float det1,det2,det3;
point k1;
    det1=p1.a*p2.b-p2.a*p1.b;
    det2=p1.c*p2.b-p2.c*p1.b;
    det3=p1.a*p2.c-p2.a*p1.c;
    k1.x=-det2/det1;
    k1.y=-det3/det1;    return k1;
}
void main (void)
{point t[100];
prim abc[100];
int n,i,j,k,l=0;
scanf ("%d",&n);
for(i=0;i<n;i++) 
{ scanf("%d",&abc[i].a);
scanf("%d",&abc[i].b);
scanf("%d",&abc[i].c);}; 
for(k=0;k<n;k++) 
        t[k]=peres(abc[k], abc[k+1]);printf("x=%f y=%f\n",t[k-1].x,t[k-1].y);
    
//if(l==0) printf("takix net");
//else printf("est");
getchar();
getchar();
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
20.05.2013, 18:30     Пересечение прямых #2
По формуле Крамера: http://e-maxx.ru/algo/lines_intersection

Добавлено через 49 секунд
Цитата Сообщение от Militer Посмотреть сообщение
scanf("%d",&abc[i].a);
У тебя abc[i].a вещественное число. С другими так же.

Добавлено через 1 минуту
В 25-й строке не существует элемента t[k-1], при k=0

Добавлено через 3 минуты
abc[k+1] так же не инициализирован.
Militer
1 / 1 / 0
Регистрация: 12.03.2013
Сообщений: 44
20.05.2013, 18:42  [ТС]     Пересечение прямых #3
На вещественное забыл исправить,функция peres сделана по методу Крамера, не знаю как найти 2 прямые,которые пересекаются в одной точке и вывести их координаты(прямых n штук).
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
20.05.2013, 18:44     Пересечение прямых #4
Цитата Сообщение от Militer Посмотреть сообщение
не знаю как найти 2 прямые
Найти 2 прямые?
Давай по порядку, где не понятно? Что работает не так?
Militer
1 / 1 / 0
Регистрация: 12.03.2013
Сообщений: 44
20.05.2013, 19:00  [ТС]     Пересечение прямых #5
Прямая на плоскости может быть задана уравнением ax+by+c=0, где а и b одноврем. не равны 0. Будем рассматривать прямые только с целыми коэффициентами a b c. Пусть даны коэффициенты нескольких прямых: a1,b1,c1,a2,b2,c2,...,an,bn,cn. Определить имеются ли 2 прямые, пересекающиеся в одной точке, вывести их координаты.
Militer
1 / 1 / 0
Регистрация: 12.03.2013
Сообщений: 44
23.05.2013, 16:05  [ТС]     Пересечение прямых #6
Help
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2013, 16:56     Пересечение прямых
Еще ссылки по теме:

C++ На плоскости задано множество прямых. Найти количество пересечений этих прямых
C++ Задача о двух прямых
C++ Задача "Пересечение прямых"

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
23.05.2013, 16:56     Пересечение прямых #7
Militer, Вот, особо не тестировал.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
using namespace std;
 
int main(){    
    int n, a, b, c, a2, b2, c2;
    cin >> n;
    cin >> a >> b >> c;
    for (int i = 1; i < n; i++) {
        cin >> a2 >> b2 >> c2;
        if (!(a2 * b == b2 * a && a2 * c == a * c2 && b2 * c == b * c2) && a2 * b != b2 * a) {
            double y = double(c * a2 - c2 * a)/double(b2 * a - b * a2);
            double x = double(c2 * b - c * b2)/double(b2 * a - b * a2);
            printf("YES\n %.7lf %.7lf", x, y);
            return 0;
        }
    }
    cout << "NO";
    return 0;
}
Yandex
Объявления
23.05.2013, 16:56     Пересечение прямых
Ответ Создать тему
Опции темы

Текущее время: 15:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru