今天呢,换个思路走了,先停一停数据爬虫的工作,赶赶其他作业的进度,
上次scala呢,写完了第一个实验,今天写了第二个实验,即模拟图形绘制的实验
不多说,上代码:

1 package com.ms.firstWork 2 3 object SecondWork { 4 5 def main(args: Array[String]) { 6 val p = new Point(10, 30) 7 p.draw; 8 val line1 = new Line(Point(0, 0), Point(20, 20)) 9 line1.draw 10 line1.moveTo(Point(5, 5)) //移动到一个新的点 11 line1.draw 12 line1.zoom(2) //放大两倍 13 line1.draw 14 val cir = new Circle(Point(10, 10), 5) 15 cir.draw 16 cir.moveTo(Point(30,20)) 17 cir.draw 18 cir.zoom(0.5) 19 cir.draw 20 } 21 22 } 23 24 25 case class Point(var x: Double, var y: Double) extends Drawable { 26 var Px: Double = x 27 var Py: Double = y 28 29 def shift(deltaX: Double, deltaY: Double) { 30 Px += deltaX 31 Py += deltaY 32 } 33 34 override def draw(): Unit = { 35 println("Point:(" + Px + "," + Py + ")") 36 } 37 } 38 39 trait Drawable { 40 def draw() { 41 println(this.toString) 42 } 43 } 44 45 abstract class Shape extends Drawable { 46 def moveTo(point: Point) 47 48 def zoom(step: Double) 49 50 def draw() 51 } 52 53 class Line(point1: Point, point2: Point) extends Shape { 54 override def moveTo(point: Point): Unit = { 55 point1.shift(point.Px, point.Py) 56 point2.shift(point.Px, point.Py) 57 } 58 59 override def zoom(step: Double): Unit = { 60 var tempx = (point2.Px + point1.Px) / 2 - point1.Px 61 if (tempx < 0) { 62 tempx = 0 - tempx 63 } 64 var centerx = ((point2.Px + point1.Px) / 2) 65 var zoomlengthx = (tempx * step) 66 point1.Px = centerx - zoomlengthx 67 point2.Px = centerx + zoomlengthx 68 69 var tempy = (point2.Py + point1.Py) / 2 - point1.Py 70 if (tempy < 0) { 71 tempy = 0 - tempy 72 } 73 var centery = ((point2.Py + point1.Py) / 2) 74 var zoomlengthy = (tempy * step) 75 point1.Py = centery - zoomlengthy 76 point2.Py = centery + zoomlengthy 77 } 78 79 override def draw(): Unit = { 80 println("Line:(" + point1.Px + "," + point1.Py + ")--(" + point2.Px + "," + point2.Py + ")") 81 } 82 } 83 84 class Circle(point: Point, r: Double) extends Shape { 85 var R=r 86 override def moveTo(point: Point): Unit = { 87 this.point.Px=point.Px 88 this.point.Py=point.Py 89 } 90 91 override def zoom(step: Double): Unit = { 92 R=R*step 93 } 94 95 override def draw(): Unit = { 96 println("Circle center:(" + point.Px + "," + point.Py + "),R=" + R) 97 } 98 }
运行截图:
这个比较简单,在菜鸟,w3school上都有教程,我个人推荐w3school因为这个比较新,教程较菜鸟版本比较适应我们,菜鸟有一些过时。