翻译:选择一个有趣的现实世界对象的例子,并通过列出其数据(属性,它“知道”)及其方法(行为,它可以“做什么”)来描述它作为编程对象。
解:类:狗。对象:大黄。属性:黄毛、长舌头、四条腿。方法:摇尾巴、汪汪汪。
翻译:用你自己的话描述图形模块中由以下每个操作产生的对象。 尽你所能精确。 务必提及各种物体的大小,位置和外观等。 如果有帮助,您可以包括草图。
解:(a)点:坐标为(130,130)
(b)圆:圆心坐标(30,40);半径25;绿色填充;边界线是红色。
(c)矩形:左上角坐标(20,20),右下角坐标(40,40);颜色是rgb(0,255,150),这是一种青色;边界线宽为3
(d)线:端点坐标分别为(100,100)和(100,200);线的颜色为暗红色;有个箭头。
(e)椭圆:矩形的左上角坐标(50,50),右下角坐标(60,100),然后在其内画一个唯一的内切椭圆。(画椭圆的主要原理,根据两点确定的矩形,然后画一个唯一的内切的椭圆。也就是实现了两点确定一个椭圆)。
(f)多边形:端点坐标分别为(5,5),(10,10),(5,10),(10,5);填充颜色为橘黄色
(g)文本:坐标是(100,100),文本内容是Hello World;setFace代表设置字体;serSize代表设置大小;setStyle(italic“)代表为斜体
翻译:描述以下交互式图形程序运行时会发生什么。
解:首先会出现一个绘图框,里面有一个圆,圆心坐标为(50,50),半径是20,这个圆是红色的,边界线也是红色的。然后鼠标点击某个位置,该圆的圆心就会移动到该位置,在点击第10次后,绘图框关闭。
通过以下方式修改上一个问题中的程序:
- 使它绘制正方形而不是圆形。
- 每次连续点击都会在屏幕上绘制一个额外的正方形(而不是移动前一个正方形)。
- 输入所有点击后在窗口上打印消息,并在关闭窗口之前等待最后一次点击。
解:(a)将上面的代码shape=Circle(Point(50,50),20)改为
shape= Rectangle(Point(50,50),Point(100,100))
(b)前面代码一样,只不过在移动之前,先复制一份,r2=r.clone()。然后再将r2移动,r2.move(px,py),移动后再在绘图框里绘制r2.draw(win)
win=GraphWin()
r=Rectangle(Point(50,50),Point(100,100))
r.setOutline("red")
r.setFill("red")
r.draw(win)
for i in range(10):
p1=win.getMouse()
p2=r.getCenter()
px=p1.getX()-p2.getX()
py=p1.getY()-p2.getY()
r2=r.clone()
r2.move(px,py)
r2.draw(win)
win.close()
(c) 再最后加了四行代码。首先是改变绘图框的做标系,做下角为(0,0),右上角为(10,10),文本内容绘制在上面,最后在关闭绘图框之前再监听一下鼠标的点击事件即可。
win=GraphWin()
r=Rectangle(Point(50,50),Point(100,100))
r.setOutline("red")
r.setFill("red")
r.draw(win)
for i in range(3):
p1=win.getMouse()
p2=r.getCenter()
px=p1.getX()-p2.getX()
py=p1.getY()-p2.getY()
r2=r.clone()
r2.move(px,py)
r2.draw(win)
win.setCoords(0,0,10,10)
t=Text(Point(5,9.5),"好了,别点了,再点就该停止了")
t.draw(win)
win.getMouse()
win.close()
翻译:射箭目标由黄色的中心圆圈组成,周围环绕着红色,蓝色,黑色和白色的同心环。 每个环具有相同的“宽度”,与黄色圆的半径相同。写一个绘制这样一个目标的程序。 提示:稍后绘制的对象将出现在之前绘制的对象之上。
解:没啥意思,就是画五个圆。
win=GraphWin()
whiteCir=Circle(Point(100,100),50)
whiteCir.setFill("white")
whiteCir.setOutline("white")
blackCir=Circle(Point(100,100),40)
blackCir.setFill("black")
blackCir.setOutline("black")
blueCir=Circle(Point(100,100),30)
blueCir.setFill("blue")
blueCir.setOutline("blue")
redCir=Circle(Point(100,100),20)
redCir.setFill("red")
redCir.setOutline("red")
yellowCir=Circle(Point(100,100),10)
yellowCir.setFill("yellow")
yellowCir.setOutline("yellow")
whiteCir.draw(win)
blackCir.draw(win)
blueCir.draw(win)
redCir.draw(win)
yellowCir.draw(win)
win.getMouse()
翻译:写一个绘制某种面孔的程序。
解:win=GraphWin()
head=Circle(Point(100,100),50)
head.draw(win)
#左眼睛
leftEye=Circle(Point(75,75),5);
#左眼睛的瞳仁
leftEye1=Circle(Point(75,75),2);
leftEye.setFill("black")
leftEye1.setFill("white")
#右眼睛,是通过复制左眼睛获得的
rightEye=leftEye.clone()
#右眼睛的瞳仁,通过复制获得
rightEye1=leftEye1.clone()
rightEye.move(50,0)
rightEye1.move(50,0)
#鼻子
nose=Circle(Point(100,100),2)
nose.setFill("black")
#嘴巴
mouth=Line(Point(95,125),Point(105,125));
leftEye.draw(win)
leftEye1.draw(win)
rightEye.draw(win)
rightEye1.draw(win)
nose.draw(win)
mouth.draw(win)
win.getMouse()
翻译:写一个有圣诞树和雪人的冬季场景的程序。
解:pass(graphics不提供画弧的函数,它是tkinter的扩展,tkinter是用来开发界面的,提供的画图方法也非常有限。)
翻译:编写一个程序,在屏幕上绘制5个骰子,描绘直线(1,2,3,4,5或2,3,4,5,6)。
解:pass
翻译:修改图形未来值程序,以便输入(principal和apr)也使用Entry对象以图形方式完成。
解:pass
翻译:圆交点。 编写一个程序,计算圆与水平线的交点,并以文本和图形方式显示信息。
输入:圆的半径和线的y轴截距。
输出:在坐标为-10,-10到10,10的窗口中以给定半径绘制以(0,0)为中心的圆。
使用给定的y截距在窗口上绘制一条水平线。
以红色绘制两个交点。
打印出交点的x值。
解:from math import *
#输入
r=input("圆的半径:")
y=input("线的y轴截距:")
win=GraphWin()
#定义坐标系,即绘图框的左下角为(-10,-10),右上角为(10,10)
win.setCoords(-10,-10,10,10)
#定义圆并绘制
c=Circle(Point(0,0),r)
c.draw(win)
#定义直线并绘制
l=Line(Point(-10,y),Point(10,y))
l.draw(win)
#通过公式得到第一个两个交点的x值
x1=-sqrt(pow(r,2)-pow(y,2))
x2=sqrt(pow(r,2)-pow(y,2))
#得到两个交点赋予红色并绘制
p1=Point(x1,y)
p2=Point(x2,y)
p1.setFill("red")
p2.setFill("red")
p1.draw(win)
p2.draw(win)
#打印x的值
print ("左边的交点x值为%.2f"%x1)
print ("右边的交点x值为%.2f"%x2)
#监听鼠标点击事件,即绘图框任意地方,绘图框消失,若无该代码,则绘图框会一闪而过
win.getMouse()
翻译:线格式
该程序允许用户绘制线段,然后显示有关线段的一些图形和文本信息。
输入:点击两次线段的终点鼠标
输出:以青色绘制线段的中点。
划清界线。
打印线的长度和斜率。
解:from math import *
win=GraphWin()
#如果不设置坐标系,默认的绘图框是左上角为原点,为符合数学坐标系,故将原点设置在左下角,右上角为(100,100)
win.setCoords(0,0,100,100)
#通过点击获取线段两端点并绘制线段
p1=win.getMouse()
p2=win.getMouse()
l=Line(p1,p2)
l.draw(win)
#获取中点并绘制,颜色我给的不是青色是红色,颜色不重要
cp=l.getCenter()
cp.setFill("red")
cp.draw(win)
#获取线段两端点的xy值,用来计算斜率和长度
x1=p1.getX()
y1=p1.getY()
x2=p2.getX()
y2=p2.getY()
dx=x2-x1
dy=y2-y1
#计算斜率
K=dy/dx
#计算长度
L=sqrt(pow(dx,2)+pow(dy,2))
print ("该线段的斜率为%.2f"%K)
print ("该线段的长度为%.2f"%L)
win.getMouse()
翻译:矩形信息。
该程序显示有关用户绘制的矩形的信息。
输入:两次鼠标单击矩形的对角。
输出:绘制矩形。
打印矩形的周长和面积。
解:win=GraphWin()
from math import *
#通过鼠标点击获取矩形对角点并绘制矩形
p1=win.getMouse()
p2=win.getMouse()
rec=Rectangle(p1,p2)
rec.draw(win)
#通过对角点来获取矩形的长和宽
dx=abs(p1.getX()-p2.getX())
dy=abs(p1.getX()-p2.getY())
#计算周长和面积
perimeter=2*(dx+dy)
area=dx*dy
print ("该矩形的周长是:%.2f"%perimeter)
print ("该矩形的面积是:%.2f"%area)
win.getMouse()
翻译:三角形信息。
与上一个问题相同,但三角形的顶点有3次点击。
解:from math import *
win=GraphWin()
#鼠标点击三下绘制三角形
p1=win.getMouse()
p2=win.getMouse()
p3=win.getMouse()
tri=Polygon(p1,p2,p3)
tri.draw(win)
#计算三角形三条边长
a=sqrt(pow((p1.getX()-p2.getX()),2)+pow((p1.getY()-p2.getY()),2))
b=sqrt(pow((p2.getX()-p3.getX()),2)+pow((p2.getY()-p3.getY()),2))
c=sqrt(pow((p1.getX()-p3.getX()),2)+pow((p1.getY()-p3.getY()),2))
#计算周长和面积
s=(a+b+c)/2
perimeter=a+b+c
area=sqrt(s*(s-a)*(s-b)*(s-c))
print ("该三角形的周长是:%.2f"%perimeter)
print ("该三角形的面积是:%.2f"%area)
win.getMouse()
注:可以发现,这个题在计算三条边长的时候略显麻烦,可以将计算边长的代码封装在一个函数内。以下代码同样可以实现这个功能。
#定义计算两点间距离的函数
def getLength(p1,p2):
from math import *
return sqrt(pow((p1.getX() - p2.getX()), 2) + pow((p1.getY() - p2.getY()), 2))
def main():
from math import *
win = GraphWin()
# 鼠标点击三下绘制三角形
p1 = win.getMouse()
p2 = win.getMouse()
p3 = win.getMouse()
tri = Polygon(p1, p2, p3)
tri.draw(win)
# 调用getLength函数来计算两点间的距离
a = getLength(p1,p2)
b = getLength(p2,p3)
c = getLength(p1,p3)
# 计算周长和面积
s = (a + b + c) / 2
perimeter = a + b + c
area = sqrt(s * (s - a) * (s - b) * (s - c))
print ("该三角形的周长是:%.2f" % perimeter)
print ("该三角形的面积是:%.2f" % area)
win.getMouse()
main()
翻译:您将编写一个程序,允许用户使用五次鼠标单击绘制一个简单的房子。 前两次点击将是房子矩形框架的对角。 第三次单击将指示矩形门的顶部边缘的中心。 门的总宽度应为房屋框架宽度的五分之一。 门的侧面应从顶部的角落向下延伸到框架的底部。 第四次单击将指示方形窗口的中心。 窗户宽度是门的一半。 最后一次点击将指示屋顶的顶峰。 屋顶的边缘将从峰顶处延伸到房屋框架顶部边缘的角落。
解:def getLength(p1,p2):
from math import *
return sqrt(pow((p1.getX() - p2.getX()), 2) + pow((p1.getY() - p2.getY()), 2))
def main():
win=GraphWin()
#定义一个坐标系
win.setCoords(0,0,100,100)
#获取前两个鼠标点击的点绘制房子
p1 = win.getMouse()
p2 = win.getMouse()
house=Rectangle(p1,p2)
house.draw(win)
#获取第三个鼠标点击的点
p3 = win.getMouse()
#计算房子的宽度
houseWidth=getLength(p1,p2)
#通过房子的宽度计算门的宽度
doorWidth=houseWidth/5
#通过门的宽度和第三次点击的点计算门的左上角点和右下角点
doorP1=Point(p3.getX()-doorWidth/2,p3.getY())
doorP2=Point(p3.getX()+doorWidth/2,p1.getY())
#通过门的两点来绘制门
door=Rectangle(doorP1,doorP2)
door.draw(win)
#获取第四次点击的点
p4 = win.getMouse()
#通过门的宽度计算窗户的宽度
windowWidth=doorWidth/2
#通过窗户的宽度和第四次点击的点来获取窗户的对角点
windowP1=Point(p4.getX()-windowWidth/2,p4.getY()+windowWidth/2)
windowP2=Point(p4.getX()+windowWidth/2,p4.getY()-windowWidth/2)
#通过窗户的对角点来绘制窗户
window=Rectangle(windowP1,windowP2)
window.draw(win)
#获取第五次鼠标点击的点
p5 = win.getMouse()
#通过第一次和第二次点击的点来获取房顶的两个点
roofP1=Point(p1.getX(),p2.getY())
roofP2=p2
#绘制房顶
roof=Polygon(p5,roofP1,roofP2)
roof.draw(win)
win.getMouse()
main()