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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.11.2015, 15:31   #1
Sterben
Форумчанин
 
Аватар для Sterben
 
Регистрация: 01.03.2015
Сообщений: 118
По умолчанию Масштабирование относительно центра фигуры("graphics.h")

Код:
#include <graphics.h> 
#include <iostream>
#include <conio.h>
#include <math.h>
#include <limits.h>
#define PI 3.14
#define MAX 3

class People{
	private:
		float arr[6][4];
		public:
		People(){
			arr[0][0] = 90;
			arr[0][1] = 170;
			arr[0][2] = 90;
			arr[0][3] = 210;
			arr[1][0] = 90;
			arr[1][1] = 210;
			arr[1][2] = 80;
			arr[1][3] = 240;
			arr[2][0] = 90;
			arr[2][1] = 210;
			arr[2][2] = 110;
			arr[2][3] = 240;
			arr[3][0] = 90;
			arr[3][1] = 180;
			arr[3][2] = 70;
			arr[3][3] = 200;
			arr[4][0] = 90;
			arr[4][1] = 180;
			arr[4][2] = 110;
			arr[4][3] = 200;
			arr[5][0] = 90;
			arr[5][1] = 170;
			arr[5][2] = 10;
			arr[5][3] = 10;
		}
		void paint(){
		for(int i = 0 ; i < 5 ;i++)
		line((float)arr[i][0], (float)arr[i][1], (float)arr[i][2], (float)arr[i][3]);
		fillellipse((float)arr[5][0],(float)arr[5][1],(float)arr[5][2],(float)arr[5][3]);
	}
	void transform(float tr[][MAX]);
};
void People::transform(float tr [] [MAX]){
	float a[MAX],temp;
	int n,s,l;
		for (int i = 0; i < 6; i++) {
		for (int j = 0; j <= 2; j += 2) {
			a[0] = arr[i][j];
			a[1] = arr[i][j+1];
			a[2] = 1 ;
			for (n = 0; n < 2; n++) {
				for (s = 0; s < 3; s++) {
					temp += a[s] * tr[s][n];
						std::cout << "I = " << i << " " << a[s] << " * " << tr[s][n] << std::endl;
					}
					std::cout << "Temp = " << temp << std::endl;
						arr[i][n + j] = temp;
						temp = 0;
			}
		}
	}
}

int main (){
	const int n = 6 ;
	int g = PI/180;
	int driver = 9 , mode = 2 , error_code;
	initgraph(&driver , &mode ," ");
	error_code = graphresult();
	if(error_code != grOk){
		std::cout << "Graphics error:" << grapherrormsg(error_code)<<std::endl;
		getch();
		return 0;
	}
	setlinestyle(1,0,3);
	People people;
	people.paint();
	 float _translateMAX[MAX][MAX]{

						 {2,0,0},
						 {0,2,0},
						 {,,1}
						};  
	float _translateMIN[MAX][MAX]{
						{0.5,0,0},
						{0,0.5,0},
						{,,1}};
	//people.transform(_translateMAX);
	getch();   
	cleardevice();
	getch();
	people.paint();
	people.transform(_translateMIN);
	getch();
	cleardevice();
	getch();
	people.paint();   
	getch();
	closegraph();
	system("pause");
	return 0;
}
как сделать что бы все происходило на месте ?
Изображения
Тип файла: jpg Безымянный.jpg (19.4 Кб, 60 просмотров)
Тип файла: jpg 1.jpg (16.4 Кб, 60 просмотров)
Sterben вне форума Ответить с цитированием
Старый 14.11.2015, 23:57   #2
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

4.1.3. Преобразование: поворот, отражение, масштабирование
8Observer8 вне форума Ответить с цитированием
Старый 15.11.2015, 14:28   #3
Sterben
Форумчанин
 
Аватар для Sterben
 
Регистрация: 01.03.2015
Сообщений: 118
По умолчанию

а как поместить центр фигуры в начало координат?
Sterben вне форума Ответить с цитированием
Старый 15.11.2015, 18:13   #4
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Цитата:
Сообщение от Sterben Посмотреть сообщение
а как поместить центр фигуры в начало координат?
Нужно назначить Pivot Point, то есть точку, которая будет считаться точкой фигуры. Она может совпадать с одной из точек фигуры или не сопадать.

Перемещение, масштабирование и повороты в трехмерном пространстве

Вместо dx и dy нужно подставить координаты Pivot Point с обратными знаками.

Правда, там про 3D пространство, но это неважно. Просто нужно прибавить к каждой точке координаты Pivot Point с обратным знаком, тогда фигура переместится в центр координат.

Последний раз редактировалось 8Observer8; 15.11.2015 в 18:16.
8Observer8 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Постоянно слетает галочка "автоматически" в "Параметры Excel", "Формулы", "Вычисления в книге" Alexsandrr Microsoft Office Excel 4 19.10.2013 14:22
Изменение "Толщины" и "Длины" фигуры одновременно 7vlad37 Microsoft Office Excel 2 13.07.2011 17:53
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
Ширина блока относительно "Шапки" Noin HTML и CSS 5 27.07.2009 08:39
ОШИБКА:"error BGI graphics not ..." Panterka Помощь студентам 7 12.12.2007 17:06