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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2017, 23:38   #21
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Ну что там?

На сетке нарисовал?
(для выявления закономерностей/ придумывания формул)
ura_111 вне форума Ответить с цитированием
Старый 29.05.2017, 00:10   #22
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Понимаешь, когда есть конкретные цифры (например, были вот такие координаты, а после поворота - такие) тогда намного проще выявить закономерность и придумать формулу поворота; а так (без чисел) - сложно.

По поводу пересечение - аналогично.
ura_111 вне форума Ответить с цитированием
Старый 29.05.2017, 16:33   #23
staccy
Пользователь
 
Регистрация: 14.03.2017
Сообщений: 36
По умолчанию

При повороте просто меняются значениями габариты по х и по у, а вот как построить пересечение все равно не понятно
staccy вне форума Ответить с цитированием
Старый 29.05.2017, 18:55   #24
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Т.к. прямоугольники задаются (по сути дела) только 2-мя координатами, то я не вижу другого варианта как пересечение находить в виде разности
(из большего вычесть меньшее... хотя, честно говоря, не до конца понимаю такую "математику"):

Безымянный2.png


Кстате, я вроде забацал код программы, где вводятся пользователем "N" прямоугольников:
Код:
#include <stdio.h> 
#include <math.h> 

typedef struct
{
	int x;  
	int y; 
} Rectangle;

typedef struct
{
	int x;
	int y;
}Point;

/*функция б)построение прямоугольника по паре точек,
задающих любую пару противолежащих вершин*/
Rectangle For_two_points(Point A, Point B)
{
	Rectangle P;
	P.x = fabs(float((B.x - A.x) / 2));
	P.y = fabs(float((B.y - A.y) / 2));
	return P;
}

/*функция а)вычисление площади прямоугольника*/
float Area(Rectangle q)
{
	float S = 0;
	S = 2 * fabs(float(q.x)) * 2 * fabs(float(q.y));
	return S;
}

void main()
{		
	Rectangle q[100];
	int N = -1;	

	printf("\nKol-vo pramougolnikov= ");
	scanf("%d", &N);
	printf("\n");
	
	Point A, B;
	int i;  //счетчик 
	for (i = 0; i < N; i++)
	{
		printf("%d) Tochki A, B: ", i + 1);
		scanf("%d%d%d%d", &A.x, &A.y, &B.x, &B.y);
		q[i] = For_two_points(A, B);
	}
	
	printf("\n Vu vveli:\n");
	printf(" N    x    y   Area\n");
	for (i = 0; i < N; i++)
	{
		printf(" %d    %d    %d    %.1f\n", i + 1, q[i].x, q[i].y, Area(q[i]));
	}
	

	scanf("%d", &N); //чтобы консоль быстро не закрывалась
}
Вот, что получилось (пользователь вводит координаты точек и программа рассчитывает данные для прямоугольников и их площади):

1.png

Последний раз редактировалось ura_111; 30.05.2017 в 00:44.
ura_111 вне форума Ответить с цитированием
Старый 30.05.2017, 16:11   #25
staccy
Пользователь
 
Регистрация: 14.03.2017
Сообщений: 36
По умолчанию

При подключении библиотеки <windows.h> перестает работать
staccy вне форума Ответить с цитированием
Старый 30.05.2017, 17:26   #26
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Ни в коем случае не подключай эту библиотеку...
Я так понимаю, это зависит от компилятора и среду разработки...
У меня отлично работает: "#include <locale.h>" с "setlocale(LC_ALL, "Russian");", а у тебя что заработает - не знаю...

А сама программа работает?
(как у меня на картинке).
ura_111 вне форума Ответить с цитированием
Старый 30.05.2017, 18:07   #27
staccy
Пользователь
 
Регистрация: 14.03.2017
Сообщений: 36
По умолчанию

Да, все работает, а почему нельзя подключать эту библиотеку?
staccy вне форума Ответить с цитированием
Старый 31.05.2017, 09:52   #28
staccy
Пользователь
 
Регистрация: 14.03.2017
Сообщений: 36
По умолчанию

Цитата:
Сообщение от ura_111 Посмотреть сообщение
Т.к. прямоугольники задаются (по сути дела) только 2-мя координатами, то я не вижу другого варианта как пересечение находить в виде разности
(из большего вычесть меньшее... хотя, честно говоря, не до конца понимаю такую "математику"):
Пересечение прямоугольника построится не вычитанием. В алгоритме будет проверка, и если у вершины 1 прямоугольника координата по y больше, то координата по х этой вершины будет координатой по х и в пересечении, и так же с y-ми. Такой алгоритм подходит для любой точки прямоугольника.
А вложение можно проверить тем же if как и принадлежность точки.
Только вот все еще не понимаю как можно поворот сделать. По рисункам это вроде можно сделать через перестановку, но как это можно записать - непонятно
staccy вне форума Ответить с цитированием
Старый 31.05.2017, 14:17   #29
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Цитата:
Сообщение от staccy Посмотреть сообщение
Пересечение прямоугольника построится не вычитанием. В алгоритме будет проверка, и если у вершины 1 прямоугольника координата по y больше, то координата по х этой вершины будет координатой по х и в пересечении, и так же с y-ми. Такой алгоритм подходит для любой точки прямоугольника.
Очень странный алгоритм. По-моему, координаты x и у никак не связаны при поиске пересечения (по крайней мере, в данном случае, когда центры прямоугольников совпадают).

Цитата:
Сообщение от staccy Посмотреть сообщение
Только вот все еще не понимаю как можно поворот сделать. По рисункам это вроде можно сделать через перестановку, но как это можно записать - непонятно
Код:
tmp = x;
x = y;
y = tmp;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 31.05.2017, 14:22   #30
staccy
Пользователь
 
Регистрация: 14.03.2017
Сообщений: 36
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Очень странный алгоритм. По-моему, координаты x и у никак не связаны при поиске пересечения (по крайней мере, в данном случае, когда центры прямоугольников совпадают).
По рисункам очень даже связаны. Минимальные координаты двух вершин прямоугольников дадут одну новую - вот и пересечение.
staccy вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Описать тип данных в виде структуры. pocheto Помощь студентам 3 29.12.2016 21:49
Реализовать struct Группа(group), в которой содержатся struct Студент(Student) TokaChan Помощь студентам 2 07.07.2016 07:22
описать тип 'шахматная доска' vadimc Помощь студентам 0 15.12.2012 10:54
Описать тип с данными о сотрудниках Масим Помощь студентам 13 24.03.2010 14:09