编辑代码

case class Point(var x:Double,var y:Double) extends Drawable{
    def shift(deltaX:Double,deltaY:Double){x+=deltaX;y+=deltaY}
}
trait Drawable{
    def draw(){println(this.toString)}
}

/*************** Begin ***************/

// 请完成 Shape类、Line类和Circle类的定义。
abstract class Shape(var location:Point){//location是Shape的一个可变字段
	def moveTo(newLocation:Point){ //默认实现,只是修改位置
		location = newLocation
	}
	    def zoom(scale:Double)
}
class Line(beginPoint:Point,var endPoint:Point) extends Shape(beginPoint) with Drawable{
	override def draw(){
	println(s"Line:(${location.x},${location.y})--(${endPoint.x},${endPoint.y})")} //按指定格式重载click
	override def moveTo(newLocation:Point){
		endPoint.shift(newLocation.x - location.x,newLocation.y - location.y) //直线移动时,先移动另外一个端点
		location = newLocation //移动位置
	}
	override def zoom(scale:Double){
		val midPoint = Point((endPoint.x + location.x)/2,(endPoint.y + location.y)/2)  //求出中点,并按中点进行缩放
		location.x = midPoint.x + scale * (location.x - midPoint.x)
		location.y = midPoint.y + scale * (location.y -midPoint.y)
		endPoint.x = midPoint.x + scale * (endPoint.x - midPoint.x)
		endPoint.y = midPoint.y + scale * (endPoint.y -midPoint.y)
	}
}
class Circle(center:Point,var radius:Double) extends Shape(center) with Drawable{
	override def draw(){//按指定格式重载click
		println(s"Circle center:(${location.x},${location.y}),R=$radius")}
	override def zoom(scale:Double){
		radius = radius*scale //对圆的缩放只用修改半径
	 }
}

/*************** End ***************/

object MyDraw{
    def main(args: Array[String]) {
        val p=new Point(10,30)
        p.draw;
        val line1 = new Line(Point(0,0),Point(20,20))
        line1.draw
        line1.moveTo(Point(5,5))
        line1.draw
        line1.zoom(2)
        line1.draw
        val cir= new Circle(Point(10,10),5)
        cir.draw
        cir.moveTo(Point(30,20))
        cir.draw
        cir.zoom(0.5)
        cir.draw
    }
}