谁能帮忙做个c语言画图的问题
要求画个椭圆,椭圆不是水平或垂直的,而是有点角度的倾斜,也就是画个旋转点角度的椭圆,怎么来画啊?最简单的代码怎么写?不要用拼图的方法做谢谢!!解决的话,还加分。二楼或三楼...
要求画个椭圆,椭圆不是水平或垂直的,而是有点角度的倾斜,也就是画个旋转点角度的椭圆,怎么来画啊?最简单的代码怎么写?不要用拼图的方法做谢谢!!解决的话,还加分。
二楼或三楼的,能否给个完整程序,既然都写到那里了,离最后的完整程序也不差太多,可见二位都是高手,帮个忙吧,谢谢。 展开
二楼或三楼的,能否给个完整程序,既然都写到那里了,离最后的完整程序也不差太多,可见二位都是高手,帮个忙吧,谢谢。 展开
5个回答
展开全部
不同的编译器,有自己的绘图语言和绘图窗的设置,VC++ 用CDC类。
简单办法是计算出坐标点x[i],y[i]. 然后用 move_to,line_to.
例如 VC++ API
MoveToEx( hdc,x[0],y[0], NULL );
for (i=1;i<N;i++) LineTo(hdc,x[i],y[i]);
问题的关键是如何计算出坐标点x[i],y[i]。
------------------------
与坐标轴平行的标准椭圆的椭圆方程可以表示为:
x^2/a^2 + y^2/b^2 = 1;
a 是 长半轴,沿x向;b 是 短半轴,沿y向;
未转动前,椭圆坐标点为 x[i],y[i].
转动 角度 ang 以后 椭圆坐标点为 xn[i],yn[i].
他们关系为:
xn[i]=x[i]*cos(ang) - sin(ang) * y[i];
yn[i]=x[i]*sin(ang) + cos(ang) * y[i];
-------------------------------
坐标计算程序
#include "stdio.h"
#include "math.h"
void main()
{
float a,b;
float ang;
float x[101],y[101],xn[101],yn[101],dx;
float co,si;
int i;
printf("input a and b\n"); // 注意 a >= b
scanf("%f %f",&a,&b);
printf("rotate angle in degrees\n");
scanf("%f",&ang);
co = cos(ang/180.0*3.14159265);
si = sin(ang/180.0*3.14159265);
dx = a*2/100.0;
for (i=0;i<=100;i++){
x[i]= a - dx * i;
y[i] = b * sqrt (1.0 - (1.0/a/a)*x[i]*x[i]);
}
for (i=0;i<=100;i++){
xn[i]=x[i]*co - si * y[i];
yn[i]=x[i]*si + co * y[i];
}
插入绘图程序 画xn[i],yn[i] --半个椭圆
for (i=0;i<=100;i++){y[i] = -y[i];};
for (i=0;i<=100;i++){
xn[i]=x[i]*co - si * y[i];
yn[i]=x[i]*si + co * y[i];
}
插入绘图程序 画xn[i],yn[i] --另半个椭圆
}
简单办法是计算出坐标点x[i],y[i]. 然后用 move_to,line_to.
例如 VC++ API
MoveToEx( hdc,x[0],y[0], NULL );
for (i=1;i<N;i++) LineTo(hdc,x[i],y[i]);
问题的关键是如何计算出坐标点x[i],y[i]。
------------------------
与坐标轴平行的标准椭圆的椭圆方程可以表示为:
x^2/a^2 + y^2/b^2 = 1;
a 是 长半轴,沿x向;b 是 短半轴,沿y向;
未转动前,椭圆坐标点为 x[i],y[i].
转动 角度 ang 以后 椭圆坐标点为 xn[i],yn[i].
他们关系为:
xn[i]=x[i]*cos(ang) - sin(ang) * y[i];
yn[i]=x[i]*sin(ang) + cos(ang) * y[i];
-------------------------------
坐标计算程序
#include "stdio.h"
#include "math.h"
void main()
{
float a,b;
float ang;
float x[101],y[101],xn[101],yn[101],dx;
float co,si;
int i;
printf("input a and b\n"); // 注意 a >= b
scanf("%f %f",&a,&b);
printf("rotate angle in degrees\n");
scanf("%f",&ang);
co = cos(ang/180.0*3.14159265);
si = sin(ang/180.0*3.14159265);
dx = a*2/100.0;
for (i=0;i<=100;i++){
x[i]= a - dx * i;
y[i] = b * sqrt (1.0 - (1.0/a/a)*x[i]*x[i]);
}
for (i=0;i<=100;i++){
xn[i]=x[i]*co - si * y[i];
yn[i]=x[i]*si + co * y[i];
}
插入绘图程序 画xn[i],yn[i] --半个椭圆
for (i=0;i<=100;i++){y[i] = -y[i];};
for (i=0;i<=100;i++){
xn[i]=x[i]*co - si * y[i];
yn[i]=x[i]*si + co * y[i];
}
插入绘图程序 画xn[i],yn[i] --另半个椭圆
}
展开全部
#include <stdio.h>
#include <graphics.h>
#include <math.h>
#define PI 3.1415926
void init(void)
{
int driver,mode;
driver=DETECT;
initgraph(&driver,&mode,"");
cleardevice();
}
void main()
{
double Q;
init();
for (Q = 0.0; Q < 2 * PI; Q += 0.01)
putpixel(90 + 50 * cos(Q - 0.5), 100 + 40 * sin(Q), 4);
getch();
closegraph();
}
#include <graphics.h>
#include <math.h>
#define PI 3.1415926
void init(void)
{
int driver,mode;
driver=DETECT;
initgraph(&driver,&mode,"");
cleardevice();
}
void main()
{
double Q;
init();
for (Q = 0.0; Q < 2 * PI; Q += 0.01)
putpixel(90 + 50 * cos(Q - 0.5), 100 + 40 * sin(Q), 4);
getch();
closegraph();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
要用graphics.h头文件
调用库函数
ellipse(int x, int y, int stangle, int endangle,
int xradius, int yradius)
(x,y)为椭圆中心坐标
stangle为开始角度
endangle为结束角度
xradius为横轴长
yradius为纵轴长
这个是画一段弧,C语言库文件里没有你要的库函数,你自己根据自己的需要写一个能够达到你要求的函数,调用就行了(不过很辛苦,但很有成就感)
/* Note:Your choice is C IDE */
#include "stdio.h"
#include "graphics.h"
void init(void);
main()
{
init();
ellipse(100,200,160,340,23,23);
getch();
closegraph();
}
/*图形驱动程序*/
void init(void)
{
int driver,mode;
driver=DETECT;
initgraph(&driver,&mode,"c:\\tc");
cleardevice();
}
调用库函数
ellipse(int x, int y, int stangle, int endangle,
int xradius, int yradius)
(x,y)为椭圆中心坐标
stangle为开始角度
endangle为结束角度
xradius为横轴长
yradius为纵轴长
这个是画一段弧,C语言库文件里没有你要的库函数,你自己根据自己的需要写一个能够达到你要求的函数,调用就行了(不过很辛苦,但很有成就感)
/* Note:Your choice is C IDE */
#include "stdio.h"
#include "graphics.h"
void init(void);
main()
{
init();
ellipse(100,200,160,340,23,23);
getch();
closegraph();
}
/*图形驱动程序*/
void init(void)
{
int driver,mode;
driver=DETECT;
initgraph(&driver,&mode,"c:\\tc");
cleardevice();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
留个邮箱吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个有点难。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询