利用C语言实现二维图形的变换 30
二维图形由点或直线段组成,直线段可由其端点坐标定义,二维图形的几何变换实际是对点或对直线段端点在变换矩阵的作用下来实现的。设是原来的点,是变换之后的点,则几种典型的变换如...
二维图形由点或直线段组成,直线段可由其端点坐标定义,二维图形的几何变换实际是对点或对直线段端点在变换矩阵的作用下来实现的。设 是原来的点, 是变换之后的点,则几种典型的变换如下:
(a) 平移变换(translation):BM
(b) 比例变换(scale):
(c) 旋转变换(rotation):
好的话再加20分 展开
(a) 平移变换(translation):BM
(b) 比例变换(scale):
(c) 旋转变换(rotation):
好的话再加20分 展开
3个回答
展开全部
你先看看吧,思路大概就是这样,不懂的问我。
#include<stdio.h>
#include<math.h>
#include<iostream>
using namespace std;
struct point
{
float x;
float y;
};
void translation(point*pt, float xp,float yp,int num)//num代表点的个数
{
for(int i=0;i<num;i++)
{
(pt+i)->x+=xp;
(pt+i)->y+=yp;
}
}
void scale(point *pt,float xs,float ys,int num)
{
for(int i=0;i<num;i++)
{
(pt+i)->x*=xs;
(pt+i)->y*=ys;
}
}
void rotation(point *pt,float angle,int num)
{
int a[2][2];
angle=angle/180*3.141592657;
a[0][0]=cos(angle);
a[0][1]=-sin(angle);
a[1][0]=sin(angle);
a[1][1]=cos(angle);
point* temp;
for(int i=0;i<num;i++)
{
temp->x=(pt+i)->x;
temp->y=(pt+i)->y;
(pt+i)->x=temp->x*a[0][0]+a[0][1]*temp->y;
(pt+i)->y*=temp->x*a[1][0]+a[1][1]*temp->y;
}
}
int main()
{
int i=0,N,mode,angle,xp,yp,xk,yk,num;
cout<<"please input the number of point "<<endl;
scanf("%d",&N);
num=N;
point pt[10];
while(N--)
{
printf("please input points(x,y):\n");
scanf("%f%f",&pt[i].x,&pt[i].y);
i++;
}
printf("please input motions\n");
printf("0 stand for translation:\n");
printf("1 stand for scale:\n");
printf("2 stand for rotation:\n");
scanf("%d",&mode);
switch(mode)
{
case 0:
printf("please input the translation in x and y direction respectivly:\n");
cin>>xp>>yp;
translation(pt, xp,yp,num);
break;
case 1:
printf("please input the scale in x and y direction respectivly:\n");
scanf("%f%f",&xk,&yk);
scale(pt, xk,yk,num);
break;
case 2:
printf("please input the angle:\n");
scanf("%f",&angle);
rotation(pt, angle,num);
break;
}
printf("after translatiton or scale or rotation:\n");
for(int i=0;i<num;i++)
printf("%f %f\n",pt[i].x,pt[i].y);
}
#include<stdio.h>
#include<math.h>
#include<iostream>
using namespace std;
struct point
{
float x;
float y;
};
void translation(point*pt, float xp,float yp,int num)//num代表点的个数
{
for(int i=0;i<num;i++)
{
(pt+i)->x+=xp;
(pt+i)->y+=yp;
}
}
void scale(point *pt,float xs,float ys,int num)
{
for(int i=0;i<num;i++)
{
(pt+i)->x*=xs;
(pt+i)->y*=ys;
}
}
void rotation(point *pt,float angle,int num)
{
int a[2][2];
angle=angle/180*3.141592657;
a[0][0]=cos(angle);
a[0][1]=-sin(angle);
a[1][0]=sin(angle);
a[1][1]=cos(angle);
point* temp;
for(int i=0;i<num;i++)
{
temp->x=(pt+i)->x;
temp->y=(pt+i)->y;
(pt+i)->x=temp->x*a[0][0]+a[0][1]*temp->y;
(pt+i)->y*=temp->x*a[1][0]+a[1][1]*temp->y;
}
}
int main()
{
int i=0,N,mode,angle,xp,yp,xk,yk,num;
cout<<"please input the number of point "<<endl;
scanf("%d",&N);
num=N;
point pt[10];
while(N--)
{
printf("please input points(x,y):\n");
scanf("%f%f",&pt[i].x,&pt[i].y);
i++;
}
printf("please input motions\n");
printf("0 stand for translation:\n");
printf("1 stand for scale:\n");
printf("2 stand for rotation:\n");
scanf("%d",&mode);
switch(mode)
{
case 0:
printf("please input the translation in x and y direction respectivly:\n");
cin>>xp>>yp;
translation(pt, xp,yp,num);
break;
case 1:
printf("please input the scale in x and y direction respectivly:\n");
scanf("%f%f",&xk,&yk);
scale(pt, xk,yk,num);
break;
case 2:
printf("please input the angle:\n");
scanf("%f",&angle);
rotation(pt, angle,num);
break;
}
printf("after translatiton or scale or rotation:\n");
for(int i=0;i<num;i++)
printf("%f %f\n",pt[i].x,pt[i].y);
}
更多追问追答
追问
我试了一下怎么不行啊,比例转换那个,出现错误了!还有能不能再VC6.0里实现画图啊!
追答
改一下哈。
#include
#include
#include
using namespace std;
struct point
{
float x;
float y;
};
void translation(point*pt, float xp,float yp,int num)//num代表点的个数
{
for(int i=0;ix+=xp;
(pt+i)->y+=yp;
}
}
void scale(point *pt,float xs,float ys,int num)
{
for(int i=0;ix*=xs;
(pt+i)->y*=ys;
}
}
void rotation(point *pt,float angle,int num)
{
float a[2][2];
angle=angle/180*3.141592657;
a[0][0]=cos(angle);
a[0][1]=-sin(angle);
a[1][0]=sin(angle);
a[1][1]=cos(angle);
point temp;
for(int i=0;ix;
temp.y=(pt+i)->y;
(pt+i)->x=temp.x*a[0][0]+a[0][1]*temp.y;
(pt+i)->y=temp.x*a[1][0]+a[1][1]*temp.y;
}
}
int main()
{
int i=0,N,mode,angle,xp,yp,xk,yk,num;
cout>xp>>yp;
translation(pt, xp,yp,num);
break;
case 1:
printf("please input the scale in x and y direction respectivly:\n");
cin>>xk>>yk;
scale(pt, xk,yk,num);
break;
case 2:
printf("please input the angle:\n");
cin>>angle;
rotation(pt, angle,num);
break;
}
printf("after translatiton or scale or rotation:\n");
for(int i=0;i<num;i++)
printf("%f %f\n",pt[i].x,pt[i].y);
}
展开全部
c语言环境下的图形变换在不引入opengl之前是相当复杂的,opengl貌似可以直接脱离语言环境直接用自带的函数就能实现各种功能。具体变换就是函数的问题,复杂而麻烦的是如何搭建环境。具体网上搜索示例代码即可。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
+1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询