第十三课坐标计算---坐标扩展命令
【坐标扩展命令】
GoC的坐标命令中还有几个扩展的命令。
坐标类扩展命令1 | |
pen.getX(); | 例:cout<< pen.x(); |
pen.getY(); | 取当前笔位置的Y坐标值。 例:cout << pen.y(); |
利用好扩展命令,有时可以得到意外的方便。
例题13.1:输入N,求边长为N的正三角形的高是多少?
例如N=200时,结果是:
分析:
上面图中,三角形的高就是上面顶点的Y轴坐标。
因此可以到达高度后,输出pen.getY( )即可。高度不一定是整数,要用小数,这里是double型。
样例程序13.1 | 图形 |
int main() { double N; cin>> N; //输入N
p.rt(30); //画正三角形 p.fd(N).rt(120); //到顶点
pen<< pen.getY(); //输出高度
p.fd(N).rt(120); //继续画三角形 p.fd(N).rt(120);
return0; } | N输入100时: |
例题13.2:正方形变形。有一个边长是200的正方形,现在边长不变,当角度不是90度了,是45度和135度。请画出长对角线,如下图:
分析:
上面图中,平行四边形好画,但对角线怎么办?
三角形的对角线可以用line命令上连接图的原点O和A点。原单坐标是(0,0),只要知道在知道A点的坐标就可以了。可以用getX、getY函数获得笔位置的坐标。程序如下:
样例程序13.1 | 图形 |
int main() { pen.rt(45); pen.fd(200).rt(45); pen.fd(200).rt(135); double x=pen.getX();//保存当前的x坐标 double y=pen.getY(); //保存当前的Y坐标 pen.fd(200).rt(45); pen.fd(200).rt(135); pen.line(x,y); //画对角线 return0; } |
|
例题13.3:有一个半径是100的圆,在里面画一个内切的正5边形。
|
分析:如果要计算五边形的边长、边与圆的角度关系等,是非常复杂的。考虑能不能从圆心出发呢?
|
上图的绿色线很容易画,把它们的端点连接起来就可以了。
样例程序13.3 | 图形 |
//程序名:样例程序13.1 //作者: gogo //2015.12.22
int main() { // showXY(); pen.o(100); pen.c(3);
//五边形的第一个顶点的坐标 pen.fd(100); double oldX=pen.x(); double oldY=pen.y(); pen.bk(100).rt(360.0/5);
for(int i=0; i<5; i++) { //得到五边形下一顶点的新位置坐标 pen.fd(100); double newX=pen.x(); double newY=pen.y();
//画五边形的边 pen.c(1).line(oldX,oldY).c(3); //回到原点 pen.move(0,0).rt(360.0/5);
//更新下次画的顶点位置坐标 oldX=newX; oldY=newY; } return0; } | 关键的技巧是
(1)要记录上一个顶点、当前顶点的坐标。
(2)程序中每次回到原点是用:move(0,0)。 |
【练习】
一、填空题。根据题目的任务,填空完善程序。
题目 | 程序 |
练习13.1剖分多边形。 | int main() { int N=8; for(int i=0; i<N; i++) { pen.fd(50).rt(360.0/N); int x=p.getX(); int y=p.getY(); pen.line( , ).line( , ); } return0; }
|
二、编程题。
练习13.2:编程画出下面图形。
|
【学习目标】
(1) 掌握getX和getY函数。
(2) 学会用用doubl型变量记录(保存)坐标。
【拓展知识】
1)勾股定理
A(x1,y1)和B(x2,y2)两点的距离(连线长度)= sqrt ((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) );
思考题:
画边长是100的正六边形的外接圆。
求边长是100的正六边形的面积。
2)扩展命令
坐标类扩展命令2 | |
pen.angle( angle ); | 笔方向(度数)。不经过旋转,直接设置笔的方向。 例:pen.angle( 90 );则笔向右。 |
pen.getAngle(); | 取得笔的当前方向。 例:double a = pen.getAngle(); |
pen.save( ); | 保存“笔”的当前状态,即保存位置、方向等信息。 |
pen.load(); | 恢复“笔”的以前保存的状态。 |