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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2014, 10:40   #1
SeregaVili
Пользователь
 
Регистрация: 07.01.2013
Сообщений: 45
По умолчанию Класс прямоугольника

Здравствуйте, может кто нибудь показать как реализовывать класс прямоугольника, который можно крутить на форме за одну из сторон? Ну или хотя бы просто передвигать?
SeregaVili вне форума Ответить с цитированием
Старый 22.12.2014, 12:51   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Это довольно большой класс. Примерно 200 строк кода. Почитайте лучше книгу: А.Я. Архангельский, М.А. Тагин "Приёмы программирования в С++ Builder". там всё подробно написано.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 22.12.2014, 18:40   #3
SeregaVili
Пользователь
 
Регистрация: 07.01.2013
Сообщений: 45
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Это довольно большой класс. Примерно 200 строк кода. Почитайте лучше книгу: А.Я. Архангельский, М.А. Тагин "Приёмы программирования в С++ Builder". там всё подробно написано.
Ну по сути я написал сам класс то уже И есть метод, который при щелчке на канве, определяет принадлежит ли точка прямоугольнику. У прямоугольника верхний левый угол, как бы закреплен. И мне нужно, чтобы я мог его двигать по кругу вокруг закрепленного угла. Мне бы формулу узнать как угол рассчитывать? Если знаете подскажите пожалуйста.
SeregaVili вне форума Ответить с цитированием
Старый 22.12.2014, 21:53   #4
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

вершины прямоугольника, по сути векторы. вот и умножай эти векторы на матрицу поворота.
https://ru.wikipedia.org/wiki/%D0%9C...BE%D1%82%D0%B0
SAMOUCHKA вне форума Ответить с цитированием
Старый 22.12.2014, 22:59   #5
SeregaVili
Пользователь
 
Регистрация: 07.01.2013
Сообщений: 45
По умолчанию

Но у меня неизвестен угол поворота, и координата вторая неизвестна, как решить такое уравнение, где две неизвестные тогда?
SeregaVili вне форума Ответить с цитированием
Старый 23.12.2014, 11:24   #6
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

что то я не понял. почему две не известных?
у тебя что, угол поворота не задан? ну и координаты центра вращения должны быть известны
или я не правильно задачу понял?
SAMOUCHKA вне форума Ответить с цитированием
Старый 23.12.2014, 13:05   #7
SeregaVili
Пользователь
 
Регистрация: 07.01.2013
Сообщений: 45
По умолчанию

Да угла поворота нету, просто я тяну прямоугольник, а он поворачивается вокруг верхнего левого угла. Причем в нем есть текст, и он также поворачивается
SeregaVili вне форума Ответить с цитированием
Старый 23.12.2014, 16:35   #8
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

Цитата:
Сообщение от SeregaVili Посмотреть сообщение
Да угла поворота нету, просто я тяну прямоугольник, а он поворачивается вокруг верхнего левого угла. Причем в нем есть текст, и он также поворачивается
что известно? Ясно изложенная задача на половину решена
SAMOUCHKA вне форума Ответить с цитированием
Старый 24.12.2014, 04:14   #9
SeregaVili
Пользователь
 
Регистрация: 07.01.2013
Сообщений: 45
По умолчанию

Так я почти уже сам решил проблему, осталось одна проблемка Последний угол (координаты xC,yC) не поворачивается, по моему по оси икс он поворачивается, а вот по оси игрек она строго в обратную сторону поворачивается. Подскажите правильную формулу для точки?
[IMG][/IMG]

Код:
	void Rotate(double pAngle){
		TextAlpha=pAngle;

		double aa = canv->TextWidth(text) + 20; // сторона 1
		double bb = canv->TextHeight(text) + 20; // сторона 2
//		int x0 = canv->TextWidth(text)/2;
//		int y0 = canv->TextHeight(text)/2; //центральная точка
		int x0 = xA;
		int y0 = yA;

		double beta = atan(bb / aa);
		double d = sqrt((aa * aa) + (bb * bb)); //диагональ
		alpha = pAngle*3.14/180;
		xA = x0;
		yA = y0;
		xB = x0+(aa*cos(alpha));
		yB = y0+(aa*sin(alpha));

//		xC = x0+(sqrt(aa * aa + bb * bb)*cos(alpha-beta));
//		yC = y0+(sqrt(aa * aa + bb * bb)*sin(alpha-beta));

		xC = x0+bb*cos(alpha-beta);
		yC = y0-bb*sin(alpha-beta);

		xD = x0-(bb*cos(alpha-3.14/2));
		yD = y0-(bb*sin(alpha-3.14/2));
		DrawRectan();
SeregaVili вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Cоздать класс жидкость. определить конструкторы деструкторы и функцию печати. создать публик производный класс. (С++) Динар Габбасов Помощь студентам 0 28.05.2012 18:44
Добавить класс в проект2,похожий на класс из проекта1!оба проекта есть! xeops C# (си шарп) 0 15.05.2012 20:31
Класс запускает поток, который заполняет этот класс. Обмен класс <=> поток. Человек_Борща Общие вопросы Delphi 8 27.02.2012 23:24
Описать класс-родитель и класс-потомок. Delphi 7 Andrew_M Помощь студентам 0 15.01.2011 14:42
Вращение прямоугольника Ponaroshku Паскаль, Turbo Pascal, PascalABC.NET 11 03.11.2009 09:22