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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.01.2012, 16:46   #1
HoBu4eK
Новичок
Джуниор
 
Регистрация: 24.01.2012
Сообщений: 1
Печаль проверить линии на пересечение

всем доброго времени суток.
я в программировании еще чайник, поэтому прошу помочь с решением следующей задачи:
7. Прямая на плоскости может быть задана уравнением ax + by = c, где a, b одновременно не равны нулю, a, b, c – целые. Пусть даны коэффициенты нескольких прямых a1, b1, c1, a2, b2, c2, ..., an, bn, cn. Определить, имеются ли среди этих прямых три прямые, пересекающиеся в одной точке.
Решить нужно в форме. Я планирую задать ручками a, b, и c, и проверить пересекаются ли она на плоскости, а результат покажет сообщение.
Но пока еще не додумался как осуществить эту проверку. Подскажите логику решения пожалуйста.
спасибо
HoBu4eK вне форума Ответить с цитированием
Старый 26.01.2012, 18:17   #2
Inv1s
Форумчанин
 
Аватар для Inv1s
 
Регистрация: 06.11.2011
Сообщений: 214
По умолчанию

А ты где учишься?)
У меня лаба была такая же, счас скину код
Помог, нажми на весы
html, js, php, С++, С#, OpenGl, DirectX, XNA, HLSL
Inv1s вне форума Ответить с цитированием
Старый 26.01.2012, 18:18   #3
Inv1s
Форумчанин
 
Аватар для Inv1s
 
Регистрация: 06.11.2011
Сообщений: 214
По умолчанию

Код:
#include <iostream>
#define MAX_POINTS 1000
using namespace std;

struct Line
{
	int a,b,c;
};
float PoX(Line *a, Line *b, bool *c)
{
	int k = a->a * b->b - b->a * a->b;
	if( k == 0) {*c = true; return 0;}
	return (a->b * b->c - b->b * a->c)/(k);
}
float PoY(Line *a, Line *b, bool *c)
{
	int k = a->a * b->b - b->a * a->b;
	if( k == 0) {*c = true; return 0;}
	return (a->c * b->a - b->c * a->a) / (k);
}
bool Find(Line *a, Line *b, Line *c)
{
	bool prof1 = false;
	if(PoX(a,b, &prof1) == PoX(b,c, &prof1) && PoY(a,b, &prof1) == PoY(b,c, &prof1))
		if(prof1 == false)
			return true;
	return false;
}
int main()
{
	int n;
	bool answ = false;
	Line Lines[MAX_POINTS];
	cin >> n;
	for(int i = 0; i < n; i++)
	{
		cout << "enter a,b,c: ";
		cin >> Lines[i].a >> Lines[i].b >> Lines[i].c;
		cout << endl;
	}
	for(int i = 0; i < n-2 && answ == false; i++)
		for(int j = i+1; j < n-1 && answ == false; j ++)
			for(int k = j+1; k < n && answ == false; k++)
				if(Find(&Lines[i], &Lines[j], &Lines[k]) == true) answ = true;

	if(answ == true) cout << "yes" << endl; 
	else cout << "no" << endl;
}
Помог, нажми на весы
html, js, php, С++, С#, OpenGl, DirectX, XNA, HLSL
Inv1s вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сделать из линии, толщиной в несколько пикселей, линии, толщиной 1 пиксель. ImmortalAlexSan Общие вопросы Delphi 12 25.10.2012 19:05
Пересечение кругов courant D'AIR Помощь студентам 7 05.10.2011 23:43
Assembler: проверить пересечение двух отрезков MaxYch Помощь студентам 0 05.10.2011 21:53
Пересечение отрезков Пaвeл Помощь студентам 1 30.04.2010 05:46
Пересечение графиков Foxx Microsoft Office Excel 5 01.04.2010 22:38