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

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

Вернуться   Форум программистов > Работа для программиста > Фриланс
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2017, 23:37   #1
vladrrom
Пользователь
 
Регистрация: 14.12.2016
Сообщений: 54
Вопрос Алгоритм Лианга—Барски. C++

Здравствуйте. Нужен взгляд со стороны на код.. Всё вроде сделано по плану, но отсечение отрезка идёт только по нижней части и то не при всех отрезках.

Код:
bool Clip(float &x1, float &x2, float &y1, float &y2, float xmin, float ymin, float xmax, float ymax)
{
	float tmin = 0, tmax = 1, i = 1;
	float x11=566, x21, y11, y21;
	
step2:
	if (i > 4)
	{
		x11 = x1 + (x2 - x1)*tmin;
		x21 = x1 + (x2 - x1)*tmax;
		y11 = y1 + (y2 - y1)*tmin;
		y21 = y1 + (y2 - y1)*tmax;
		x1 = x11; y1 = y11; x2 = x21; y2 = y21; return true;
	}
	else
	{
		float Pi, Qi;
		if (i = 1) { Pi = x1 - x2; Qi = x1 - xmin; }
		if (i = 2) { Pi = x2 - x1; Qi = xmax - x1; }
		if (i = 3) { Pi = y1 - y2; Qi = y1 - ymin; }
		if (i = 4) { Pi = y2 - y1; Qi = ymax - y1; }
		if (Pi == 0)
			if (Qi < 0) return false;
			else
			{
				++i; 
				goto step2;
			}
		if (Pi > 0)
		{
			if (tmax > (Qi / Pi)) 
				tmax = Qi / Pi;
		}
		else if (Pi > 0)
		{
			if (tmin < (Qi / Pi)) 
				tmin = Qi / Pi;
		}
		if (tmin > tmax)
			return false;
		else
		{
			++i;  
			goto step2;
		}
	}
}
Задание прикреплено. И полный проект прилагается.

За труд могу заплатить.
Изображения
Тип файла: png Screenshot_2.png (34.4 Кб, 126 просмотров)
Тип файла: png Screenshot_3.png (32.7 Кб, 133 просмотров)
Тип файла: png Screenshot_4.png (33.5 Кб, 131 просмотров)
Вложения
Тип файла: rar KG4.rar (9.1 Кб, 10 просмотров)
Тип файла: pdf 2D-clip-LB.pdf (115.6 Кб, 10 просмотров)
Тип файла: pdf Notes-task4.pdf (194.0 Кб, 8 просмотров)
vladrrom вне форума Ответить с цитированием
Старый 30.10.2017, 23:40   #2
MansMI
Пользователь
 
Регистрация: 04.07.2012
Сообщений: 32
По умолчанию

mansmi@rambler.ru пишите
MansMI вне форума Ответить с цитированием
Старый 31.10.2017, 09:12   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,542
По умолчанию

Код:
		if (Pi > 0)
		{
			if (tmax > (Qi / Pi)) 
				tmax = Qi / Pi;
		}
		else if (Pi > 0)   // и КАК это сработает, учитывая первую строку.
		{
			if (tmin < (Qi / Pi)) 
				tmin = Qi / Pi;
		}
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разветвляющийся алгоритм,циклический алгоритм и Многомерные массивы (Pascal) TrapperPTZ Помощь студентам 1 26.01.2012 08:58
Разработайте алгоритм методом пошаговой детализации и программу, реализующую этот алгоритм. iamhated Помощь студентам 1 15.01.2012 16:24
Разработайте алгоритм методом пошаговой детализации и программу, реализующую этот алгоритм iamhated Помощь студентам 1 14.01.2012 16:22
Алгоритм TMDS (Алгоритм передачи данных интерфейса DVI) Pro4RE Помощь студентам 2 24.04.2011 21:55