C++ 三角形旋转移动——左上角到右下角

三角形旋转移动——左上角到右下角

基于EasyX图形库

#include<iostream>
#include<graphics.h>
#include<math.h>
#include <windows.h>
#define PI 3.14
double pc[3][3]={-40,-35,1,
				75,15,1,
				5,45,1};
int x=0,y=0,n=1;

using namespace std;

void CreatTriangle()
{
	for(int i=0; i<3; i++)
		line( pc[i%3][0], pc[i%3][1], pc[(i+1)%3][0],  pc[(i+1)%3][1] );
}

void MultiMatrix(double T[3][3])//矩阵相乘
{
	int i,j;
	double PNew[3][3];

	for(i=0;i<3;i++)
		for(j=0;j<3;j++)
			PNew[i][j]=pc[i][0]*T[0][j]+pc[i][1]*T[1][j]+pc[i][2]*T[2][j];
		
	for(i=0;i<3;i++)
		for(j=0;j<3;j++)
			pc[i][j]=PNew[i][j];
}

void Play()
{
	double T1[3][3],T2[3][3],T3[3][3];
	int i,j;

	//平移变换矩阵//先平移回原点
	T1[0][0]=1;T1[0][1]=0;T1[0][2]=0;
	T1[1][0]=0;T1[1][1]=1;T1[1][2]=0;
	T1[2][0]=-x;T1[2][1]=-y;T1[2][2]=1;	
	
	//逆时针自转变换矩阵//绕原点旋转
	T2[0][0]=cos(10*PI/180);T2[0][1]=-sin(10*PI/180);T2[0][2]=0;
	T2[1][0]=sin(10*PI/180);T2[1][1]=cos(10*PI/180);T2[1][2]=0;
	T2[2][0]=0;T2[2][1]=0;T2[2][2]=1;

	if(n==1){x+=5;y+=5;}
	else{x-=5;y-=5;}
	
	if(x>600 || x<0)n=-n;

	//反平移变换矩阵//真正的移动
	T3[0][0]=1;T3[0][1]=0;T3[0][2]=0;
	T3[1][0]=0;T3[1][1]=1;T3[1][2]=0;
	T3[2][0]=x;T3[2][1]=y;T3[2][2]=1;

	MultiMatrix(T1);
	MultiMatrix(T2);
	MultiMatrix(T3);

	CreatTriangle();
	
	Sleep(30);
	cleardevice();

}

int main()
{
	initgraph(600, 600,SHOWCONSOLE);

	while(1){
		Play();
	}

	getchar();
	closegraph();
	return 0;
}



三角形变大缩小旋转移动——左上角到右下角

三角形旋转移动——沿正弦曲线移动

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
下面是一个简单的 C++ 控制台应用程序,用于绘制三角形、圆、直线和矩形: ```c++ #include <iostream> #include <cmath> using namespace std; void drawLine(int x1, int y1, int x2, int y2) { int dx = abs(x2 - x1), dy = abs(y2 - y1); int sx = x1 < x2 ? 1 : -1, sy = y1 < y2 ? 1 : -1; int err = dx - dy; while (x1 != x2 || y1 != y2) { cout << "."; int e2 = 2 * err; if (e2 > -dy) { err -= dy; x1 += sx; } if (e2 < dx) { err += dx; y1 += sy; } } cout << endl; } void drawTriangle(int x1, int y1, int x2, int y2, int x3, int y3) { drawLine(x1, y1, x2, y2); drawLine(x2, y2, x3, y3); drawLine(x3, y3, x1, y1); } void drawCircle(int xc, int yc, int r) { int x = 0, y = r; int d = 3 - 2 * r; while (x <= y) { cout << "."; if (d < 0) { d += 4 * x + 6; } else { d += 4 * (x - y) + 10; y--; } x++; } cout << endl; } void drawRectangle(int x, int y, int w, int h) { drawLine(x, y, x + w, y); drawLine(x + w, y, x + w, y + h); drawLine(x + w, y + h, x, y + h); drawLine(x, y + h, x, y); } int main() { // 绘制三角形 cout << "Triangle:" << endl; drawTriangle(10, 10, 20, 30, 30, 10); // 绘制圆形 cout << "Circle:" << endl; drawCircle(20, 20, 10); // 绘制直线 cout << "Line:" << endl; drawLine(10, 30, 30, 10); // 绘制矩形 cout << "Rectangle:" << endl; drawRectangle(40, 10, 20, 30); return 0; } ``` 这个程序使用了一些基本的绘图算法,包括绘制直线的 Bresenham 算法、绘制圆形的中点画圆算法、以及绘制矩形的基于直线的算法。你可以根据需要进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木18

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值