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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2011, 15:12   #1
forever042
 
Регистрация: 15.12.2011
Сообщений: 5
По умолчанию Нахождение точек пересечения n-угольника c прямой(c\c++)).

В файле задан многоугольник через набор вершин:

{(<x1:float>;<y1:float>),(<x2:float >;<y2:float>), <...>, (<xN:float>;<yN:float>)}

Найти точки пересечения сторон многоугольника с прямой, заданной в неявном виде (Ax+Bx+C=0) аргументами командной строки
<A:float> <B:float> <C:float>

Наложения отрезков и прямых игнорировать (исключить случаи бесконечного количесва точек пересечения).

Вывести полученные точки в порядке возрастания ординат.

Считается, что все данные вводятся с клавитатуры, количество уголов у n-уголиника не указывается

Последний раз редактировалось forever042; 15.12.2011 в 16:58. Причина: Не указан язак программирования
forever042 вне форума Ответить с цитированием
Старый 15.12.2011, 15:22   #2
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

И?
Дальше что?
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 15.12.2011, 17:03   #3
forever042
 
Регистрация: 15.12.2011
Сообщений: 5
По умолчанию

Я не понимаю, как реальзовавыть ввод и нахождение точек пересечения
forever042 вне форума Ответить с цитированием
Старый 15.12.2011, 17:15   #4
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Ну, насчет ввода -- парсить строку.
Судя по приведенному формату, количество вершин будет на 1 больше, чем запятых.
Вот такого размера и надо объявлять массив.
То есть, строк будет 2 (x и y), а столбцов -- найденное количество.
Далее, вырезать из строчки нужные фрагменты -- собственно, координаты.
После заполнения массива придется вспомнить школьный курс геометрии -- пересечение двух прямых -)
И, соответственно, проверять точку пересечения заданной прямой с каждой из сторон многоугольника.
Как-то так...
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 17.12.2011, 00:06   #5
forever042
 
Регистрация: 15.12.2011
Сообщений: 5
По умолчанию

Окей, я решил проблему ввода данных, написав иблиотеку со списками, но как найти точки пересечения?
forever042 вне форума Ответить с цитированием
Старый 17.12.2011, 02:57   #6
viron
Форумчанин
 
Аватар для viron
 
Регистрация: 02.12.2011
Сообщений: 110
По умолчанию

Код:
#include "stdafx.h"
#include "cmath"
using namespace std;

const int A = 2, B = 2, C = 0;
const M = 3;	// количество вершин в многоугольнике

struct line
{
	int x1, y1;
	int x2, y2;
};

bool IntersectDirect(line l);

int _tmain(int argc, _TCHAR* argv[])
{
	line lines[M] =
	{
		{0,0,2,2},
		{0,1,1,0},
		{9,15,72,3},
	};
	
	for (int i=0; i<M; i++)
		if (IntersectDirect(lines[i])) 
		{
			// точка пересечения
			int x = -(B/A)*lines[i].y1 - pow(lines[i].y2-lines[i].y1, 2) / ( (lines[i].x2)-lines[i].x1 );
			int y = -(A/B)*x - C/B;
			cout << "x = " << x << endl
				 << "y = " << y << endl << endl;
		}
		else cout << "No IntersectDirect.\n";



	cin.get();
	cin.get();
	return 0;
}

// true - пересекаються, false - не пересекаються
bool IntersectDirect(line l)
{
	float k1 = (l.y2 - l.y1)/(l.x2 - l.x1);	// угловой коэффициент
	float k2 = -A/B;   // угловой коэфф. для Ax+By+C=0

	if (k1 != k2)
		return true;
	else
		return false; 
}

Последний раз редактировалось viron; 17.12.2011 в 03:19.
viron вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
алгоритм нахождения точек пересечения прямой и ломаной -=zAA=- Помощь студентам 3 04.10.2011 10:49
PaintBox, определение точек пересечения прямоугольника и окружности _-Re@l-_ Общие вопросы Delphi 0 20.05.2011 16:37
Таблица со расчетом точек пересечения дуг Tidus Microsoft Office Excel 12 06.04.2011 18:32
Алгоритм подсчета количества точек пересечения отрезков juliaaaa Помощь студентам 2 24.02.2011 19:58
подсчитать количество точек пересечения fallti Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 28.06.2010 13:46