您的位置:首页 > 其它

第十二课 定位画图---坐标

2016-01-06 15:31 78 查看
第十二课 定位画图---坐标

【平面坐标】
为了能描述一个地点的位置,一般有两种说法:
l 以自己当前的位置和方向为根据,描述相对的方向和距离。例如:向前走100米,右转再走50米。GoC的笔的fd、rt命令正是如此。
l 另一种方法是根据整个城市的地图,描述确定的地点。例如:在城市的东南方向。

第2种方法在数学上叫:平面直角坐标系。如下图表示:




坐标系由原点O、水平的X轴和垂直的Y轴构成。

坐标系中每一点的位置都用它在X轴和Y轴的位置表示,称为坐标。例如:(2,3)。


上图中A点的坐标为(3,5)、B点的坐标为(-5,1)、C点的坐标为(2,-3)。

【思考】
l 坐标(0,
0)位置在哪里?
l 坐标(-3,
-5)位置在哪里?
l 坐标(6,
1)位置在哪里?

GoC中的位置也是用直角坐标表示的,你可以在程序开始加显示坐标的命令:

showXY( );
showXY(1);




showXY()更多的模式参数请查看帮助文档。

【坐标相关命令】
GoC里有几个与坐标系相关的命令:

坐标类命令
pen.move(x , y);
把“笔”移动到坐标位置(x,y)处,只是移动位置不画线。
例:pen.move(0,0);“笔”回到原点。
pen.line(x , y);
从笔的当前位置画到坐标位置(x,y)处,画线不受笔的方向影响。
例:pen.line(100,100);
使用move和line命令,可以比较方便地到指定的位置,在画和数学相关的图形时特别有效。
例题12.1:在X坐标轴上画13个点,位置从(-300,0)到(300,0)。如下图:



分析
x坐标从-300开始,每次增加50,到300。利用move(x,0)到指定位置,再画个红色的圆即可。
样例程序12.1
图形
int
main()
{
showXY(1);
for(int
x=-300;
x<=300;
x+=50)
p.move(x,0).oo(3,
_red);

return0;
}
例题12.2:画下面的图形。



分析:
连一些线,线的左端点在Y轴上,右端点固定为(300,0):
解题方法:用for语句的循环变量列举所有左端点的Y坐标,用move命令到左端点,再line到(300,0)画线即可。
样例程序12.2
图形
int
main()
{
// showXY(1);
for(int
i=0;
i<300;
i+=25)
{
pen.move(0,i);
pen.line(300,0);
}
return0;
}


例题12.3:风帆。



分析:
连一些线,线的左端点固定为(-300,0),线的中间点在Y轴上,右端点固定为(300,0):
解题方法:用for语句的循环变量列举所有左端点的Y坐标,用move命令到左端点,再line到中间Y轴上点和右端点(300,0)画线即可。
样例程序12.2
图形
int
main()
{
// showXY(1);
pen.size(5).fd(310); //画中间的柱子
pen.size(1).c(0);
for(int
y=300;
y>=0;
y-=30)
{
p.move(-300,0).line(0,y).line(300,0);
}
return0;
}


例题12.3(初中):画Y=X*X/30的函数图形。
分析:手工画函数的基本方法是“描点连线”。现在我们模拟这个方法。公式中如果不除30,x=100时y=10000,函数的图形高度会超出屏幕。

解题方法:用for语句的循环变量列举X从-100到100,计算出相应的Y值,就是一个点的坐标,用line画线即可。要先到第一点。
样例程序12.3
图形
//程序名:样例程序12.2
//作者:
gogo
//2015.12.22

int
main()
{
// showXY();
pen.move(-100,100*100/30);
for(int
x=-100;
x<100;
x++)
{
int
y=x*x/30;
pen.line(x,y);
//
pen.oo(2,3);//描点
}
return0;
}


【练习】
一、填空题。根据题目的任务,填空完善程序。

题目
程序
练习12.1画下面图形。



int
main()
{
// showXY(2);
for(int
x=-100;
x<=200;
x+=20)
{
p.move(x,100);
p.line(-x, );
}
return0
练习12.2(初中)画Y=kX的函数图形,k是键盘输入。
下面是输入-2的图形。



int
main()
{
showXY();
double
k;
cin>>k;
for(int
x=-200;
x<=200;
x++)
{
p.move(x, );
p.oo(2,3);
}
return0;
}
注:变量k定义为double型,可以输入小数,比如:0.2。
练习12.3(高中)画Y=sin(x*w)*hight的函数图形。w是周期密度,hight是高。w=3,hight=200的图形如下:



int
main()
{
// showXY();
int
w=3;
int
hight= ;
for(int
x=-200;
x<=200;
x++)
{
p.move(x,
sin(x*3.1416/180*w)*hight);
p.oo(3,1);
wait(0.01);
//
p.oo(5,_white);
}
return0;
}
:x是度数,但C++里sin函数参数单位是弧度,要转换一下:x*3.14/180。
加wait是增加动态效果。
二、编程题

练习12.4:编程画出下面图形,正方形边长为200。



参考程序:
int
main()
{
showXY(2);
double
len=200;

p.c(1).size(2);
for(int
i=0;
i<4;
i++)//画正方形边框
p.fd(len).rt(90);

p.size(1);
for(double
i=0;
i<=len;i+=
len/10)
{
p.move(0,
i ).line(len-i,0);
}
return0;
}

练习12.5:编程画出下面图形。



练习12.6:编程画一个等腰梯形,上底边长为60,下底编程为120,高为50。如下面图形。



【学习目标】
(1) 掌握平面坐标(小学生可能要专门学习一下,比如用练习软件)。
(2) 掌握move和line命令。
(3) 学会用坐标定位画图。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: