Суть проблеми в том что модель спавниться в правом нижнем правом углу и её приходиться стрелками отуда витаскивать, а хотелось бы чтобы она была по центру
#include <iostream>
#include <conio.h>
#include "winbgim.h"
#include <math.h>
#include <cstdlib>
#define ESC 27
#define LEFT 75
#define RIGHT 77
#define TOP 72
#define BOT 80
#define ROTX 100
#define ROTY 115
#define ROTZ 97
#define RSZP 120
#define RSZM 122
using namespace std;
struct Dot3d
{
int x, y, z;
};
Dot3d Hammer[20]; //Точки
int Rebro = 10;
int AngleX=0;
int AngleY=0;
int AngleZ=0;
int Krok=5;
int Mx, My;
int Rebra[24][2]
{{1,2},{2,3},{3,4},{4,1}, /////Верхня часть молота
{5,6},{6,7},{7,8},{8,5}, ////Нижня часть молота
{1,5},{2,6},{4,8},{3,7},
{9,10},{11,12},{13,14},{15,16},
{10,14},{10,12},{16,12},{14,16},
{9,11},{11,13},{13,15},{15,11},}; ////Соединение частин і ручка
void InitHammer(int, int, int, int);
void PaintHammer(Dot3d *);
void OffsetHammerHorizontal(int);
void OffsetHammerVertical(int);
void OffsetHammerResize(int);
void rotationX(int);
void rotationZ(int);
void rotationY(int);
void ResizePlus(int);
void ResizeMinus(int);
void Manipulate();
int main() //Головне Меню
{
int variant;
system ("color 6");
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
cout << "3D модель молотка\n" << endl;
cout << "Виберіть бажану дію\n" << endl;
cout << "1. Дії над фігурою\n"
<< "2. Як керувати?\n"
<< "3. Автор\n";
cout << ">";
{
cin >> variant;
{
switch (variant)
{
case 1:
cout << "Дії над фігурою" << endl;
Manipulate();
break;
case 2:
cout << "Як керувати:\n"
<<"Стрілка вправо - переміщення вправо\n"
<< "Стрілка вліво - переміщення вліво \n"
<< "Стрілка вверх - переміщення вверх\n"
<< "Стрілка вниз - переміщення вниз\n"
<< "a - Обертання по осі Z\n"
<< "s - Обертання по осі Y\n"
<< "d - Обертання по осі X\n"
<< "z - Зменшення масштабу\n"
<< "x - Збільшення масштабу\n"<< endl;
break;
case 3:
cout << "НН" << endl;
break;
}
}
}
}
void Manipulate()
{
initwindow(1200, 1000);
Mx = getmaxx()/2;;
My = getmaxy()/2;;
InitHammer(Mx,My,0,Rebro);
PaintHammer(Hammer);
int v;
while (getch()!= ESC)
{
{
v=getch();
if (v== RIGHT)
{
OffsetHammerHorizontal(Krok);
};
if (v== LEFT)
{
OffsetHammerHorizontal(-Krok);
};
if (v== BOT)
{
OffsetHammerVertical(Krok);
};
if (v== TOP)
{
OffsetHammerVertical(-Krok);
};
if (v== ROTX)
{
rotationX(5) ;
}
if (v== ROTY)
{
rotationY(5) ;
}
if (v== ROTZ)
{
rotationZ(5) ;
};
if (v== RSZM)
{
ResizeMinus(5) ;
}
if (v== RSZP)
{
ResizePlus(5) ;
}
std::cout<<v<<endl;
}
cleardevice();
PaintHammer(Hammer);
}
getch();
}
void InitHammer(int x0, int y0, int z0, int m)// Введення координат всіх точок
{
///////X ///////Y /////////Z
Hammer[0].x=x0; Hammer[0].y=y0; Hammer[0].z=z0;
Hammer[1].x=Hammer[0].x-5*m; Hammer[1].y=Hammer[0].y+25*m; Hammer[1].z=Hammer[0].z-7*m;
Hammer[2].x=Hammer[0].x+5*m; Hammer[2].y=Hammer[0].y+25*m; Hammer[2].z=Hammer[0].z-7*m;
Hammer[3].x=Hammer[0].x+5*m; Hammer[3].y=Hammer[0].y+25*m; Hammer[3].z=Hammer[0].z+7*m;
Hammer[4].x=Hammer[0].x-5*m; Hammer[4].y=Hammer[0].y+25*m; Hammer[4].z=Hammer[0].z+7*m;
Hammer[5].x=Hammer[0].x-5*m; Hammer[5].y=Hammer[0].y+2*m; Hammer[5].z=Hammer[0].z-7*m;
Hammer[6].x=Hammer[0].x+5*m; Hammer[6].y=Hammer[0].y+20*m; Hammer[6].z=Hammer[0].z-7*m;
Hammer[7].x=Hammer[0].x+2*m; Hammer[7].y=Hammer[0].y+20*m; Hammer[7].z=Hammer[0].z+12*m;
Hammer[8].x=Hammer[0].x-2*m; Hammer[8].y=Hammer[0].y+20*m; Hammer[8].z=Hammer[0].z+12*m;
Hammer[9].x=Hammer[0].x+2*m; Hammer[9].y=Hammer[0].y+20*m; Hammer[9].z=Hammer[0].z-2*m;
Hammer[10].x=Hammer[0].x+2*m; Hammer[10].y=Hammer[0].y; Hammer[10].z=Hammer[0].z-2*m;
Hammer[11].x=Hammer[0].x-2*m; Hammer[11].y=Hammer[0].y+20*m; Hammer[11].z=Hammer[0].z-2*m;
Hammer[12].x=Hammer[0].x-2*m; Hammer[12].y=Hammer[0].y; Hammer[12].z=Hammer[0].z-2*m;
Hammer[13].x=Hammer[0].x+2*m; Hammer[13].y=Hammer[0].y+20*m; Hammer[13].z=Hammer[0].z+2*m;
Hammer[14].x=Hammer[0].x+2*m; Hammer[14].y=Hammer[0].y; Hammer[14].z=Hammer[0].z+2*m;
Hammer[15].x=Hammer[0].x-2*m; Hammer[15].y=Hammer[0].y+20*m; Hammer[15].z=Hammer[0].z+2*m;
Hammer[16].x=Hammer[0].x-2*m; Hammer[16].y=Hammer[0].y; Hammer[16].z=Hammer[0].z+2*m;
}
void PaintHammer(Dot3d *c)
{
int yt1, yt2, xt1, xt2, zt1, zt2;
double anX=(AngleX%360/180.0)*3.14;
double anY=(AngleY%360/180.0)*3.14;
double anZ=(AngleZ%360/180.0)*3.14;
for(int i=0; i<=20; i++)
{
//*******
//x'=x;
//y':=y*cos(L)+z*sin(L) ;
//z':=-y*sin(L)+z*cos(L) ;
xt1=(c[Rebra[i][0]].x);
yt1=(c[Rebra[i][0]].y)*cos(anX)+c[Rebra[i][0]].z*sin(anX);
zt1=-(c[Rebra[i][0]].y)*sin(anX)+c[Rebra[i][0]].z*cos(anX);
xt2=(c[Rebra[i][1]].x);
yt2=(c[Rebra[i][1]].y)*cos(anX)+c[Rebra[i][1]].z*sin(anX);
zt2=-(c[Rebra[i][1]].y)*sin(anX)+c[Rebra[i][1]].z*cos(anX);
//*******
//x'=x*cos(L)+z*sin(L);
//y'=y;
//z'=-x*sin(L)+z*cos(L);
xt1=xt1*cos(anY)+zt1*sin(anY);
yt1=yt1;
zt1=-xt1*sin(anY)+zt1*cos(anY);
xt2=xt2*cos(anY)+zt2*sin(anY);
yt2=yt2;
zt2=-xt2*sin(anY)+zt2*cos(anY);
//******
//x'=x*cos(L)-y*sin(L);
//y'=-x*sin(L)+y*cos(L);
//z'=z;
xt1=xt1*cos(anZ)+yt1*sin(anZ);
yt1=-xt1*sin(anZ)+yt1*cos(anZ);
zt1=zt1;
xt2=xt2*cos(anZ)+yt2*sin(anZ);
yt2=-xt2*sin(anZ)+yt2*cos(anZ);
zt2=zt2;
setcolor(10);
line(xt1+Mx, yt1+My, xt2+Mx, yt2+My);
}
}
//Переміщення моделі;
void OffsetHammerHorizontal(int ofs)
{
Mx=Mx+ofs;
}
void OffsetHammerVertical(int ofs)
{
My=My+ofs;
}
//Обертання моделі;
void rotationX(int a)
{
AngleX=AngleX+a;
InitHammer(Hammer[0].x, Hammer[0].y, Hammer[0].y, Rebro);
}
void rotationY(int a)
{
AngleY=AngleY+a;
InitHammer(Hammer[0].x, Hammer[0].y, Hammer[0].y, Rebro);
}
void rotationZ(int a)
{
AngleZ=AngleZ+a;
InitHammer(Hammer[0].x, Hammer[0].y, Hammer[0].y, Rebro);
}
//Маштабування моделі;
void ResizePlus(int r)
{
Rebro=Rebro+r;
InitHammer(Hammer[0].x, Hammer[0].y, Hammer[0].y, Rebro);
}
void ResizeMinus(int r)
{
Rebro=abs(Rebro-r);
InitHammer(Hammer[0].x, Hammer[0].y, Hammer[0].y, Rebro);
}