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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ahwhjt/article/details/50469269

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

 

【平面坐标】

      为了能描述一个地点的位置,一般有两种说法:

l 以自己当前的位置和方向为根据,描述相对的方向和距离。例如:向前走100米,右转再走50米。GoC的笔的fdrt命令正是如此。

l 另一种方法是根据整个城市的地图,描述确定的地点。例如:在城市的东南方向。

 

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

http://g.hiphotos.baidu.com/zhidao/wh%3D450%2C600/sign=22131415a7c27d1ea57333c02ee58158/e61190ef76c6a7ef38370e97fefaaf51f3de666a.jpg

http://d.hiphotos.baidu.com/baike/w%3D268/sign=124f53c3b4fd5266a72b3b1293199799/eac4b74543a982265c78740f8882b9014a90eb59.jpg

 

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

 

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

上图中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);

 

  







使用moveline命令,可以比较方便地到指定的位置,在画和数学相关的图形时特别有效。

例题12.1:在X坐标轴上画13个点,位置从(-3000)到(3000)。如下图:

分析

  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的函数图形。

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

 

解题方法:用for语句的循环变量列举X-100100,计算出相应的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)      掌握moveline命令。

(3)      学会用坐标定位画图。

 

猜你喜欢

转载自blog.csdn.net/ahwhjt/article/details/50469269
今日推荐