scala实验 模拟图形绘制

题目:

对于一个图形绘制程序,用下面的层次对各种实体进行抽象。定义一个 Drawable 的特

质,其包括一个 draw 方法,默认实现为输出对象的字符串表示。定义一个 Point 类表示点,

其混入了 Drawable 特质,并包含一个 shift 方法,用于移动点。所有图形实体的抽象类为

Shape,其构造函数包括一个 Point 类型,表示图形的具体位置(具体意义对不同的具体图

形不一样)。Shape 类有一个具体方法 moveTo 和一个抽象方法 zoom,其中 moveTo 将图形从

当前位置移动到新的位置, 各种具体图形的 moveTo 可能会有不一样的地方。zoom 方法实

现对图形的放缩,接受一个浮点型的放缩倍数参数,不同具体图形放缩实现不一样。继承

Shape 类的具体图形类型包括直线类 Line 和圆类 Circle。Line 类的第一个参数表示其位置,

第二个参数表示另一个端点,Line 放缩的时候,其中点位置不变,长度按倍数放缩(注意,

缩放时,其两个端点信息也改变了),另外,Line 的 move 行为影响了另一个端点,需要对

move 方法进行重载。Circle 类第一个参数表示其圆心,也是其位置,另一个参数表示其半

径,Circle 缩放的时候,位置参数不变,半径按倍数缩放。另外直线类 Line 和圆类 Circle

都混入了 Drawable 特质,要求对 draw 进行重载实现,其中类 Line 的 draw 输出的信息样式

为“Line:第一个端点的坐标--第二个端点的坐标)”,类 Circle 的 draw 输出的信息样式为

“Circle center:圆心坐标,R=半径”。如下的代码已经给出了 Drawable 和 Point 的定义,

同时也给出了程序入口 main 函数的实现,请完成 Shape 类、Line 类和 Circle 类的定义。

源代码

/**
 * 特征类似于接口,可实现多重继承的功能
 */
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)}
}

//图形抽象类
abstract class Shape(var point: Point){
  var r=4.0
  def moveTo(point2: Point): Unit ={
    point=point2
  }
  // 抽象方法没有方法体
  def zoom(b:Double): Unit
  //圆形构造函数
  def this(cpoint: Point, cr:Double){
    //第一行必须要先调用默认的构造函数
    this(cpoint: Point)
    this.r=cr
  }
  //直线构造函数
  def this(lpoint:Point,lpoint2:Point){
    this(lpoint: Point)

  }
}
//圆形
class Circle(point: Point,R:Double) extends Shape(point: Point) with Drawable{
  r=R
  //重写,对图形放大,半径放大
  override def zoom(b:Double): Unit = {
    r = r * b
  }
  //重写,打印
  override def draw(): Unit ={
    var toString="Circle center:("+point.x+","+point.y+")\t"+"R="+r
    println(toString)
  }
  //重写,移动
  override def moveTo(point2: Point): Unit ={
    point.x=point2.x
    point.y=point2.y
  }
}
//直线
class Line(point: Point, point1: Point)extends Shape(point: Point) with Drawable{
  //重写,对图形放大
  override def zoom(b:Double): Unit = {
    var xmid=(point1.x+point.x)/2   //寻找中点坐标
    var ymid=(point1.y+point.y)/2
    point.x=xmid-(xmid-point.x)*b
    point.y=ymid-(ymid-point.y)*b
    point1.x=xmid+(point1.x-xmid)*b
    point1.y=ymid+(point1.y-ymid)*b
  }
  //重写,打印
  override def draw(): Unit ={
    var toString="Line:("+point.x+","+point.y+")--"+"("+point1.x+","+point1.y+")"
    println(toString)
  }
  //重写,移动
  override def moveTo(point2: Point): Unit ={
    point1.x=point1.x+point2.x-point.x
    point1.y=point1.y+point2.y-point.y
    point.x=point2.x
    point.y=point2.y
  }
}

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
  }
}

原文地址:https://www.cnblogs.com/xuange1/p/12257458.html

时间: 2024-08-29 13:17:46

scala实验 模拟图形绘制的相关文章

寒假学习(五)模拟图形绘制

模拟图形绘制 对于一个图形绘制程序,用下面的层次对各种实体进行抽象.定义一个 Drawable 的特质,其包括一个 draw 方法,默认实现为输出对象的字符串表示.定义一个 Point 类表示点,其混入了 Drawable 特质,并包含一个 shift 方法,于移动点.所有图形实体的抽象类为Shape,其构造函数包括一个 Point 类型,表示图形的具体位置(具体意义对不同的具体图形不一样).Shape 类有一个具体方法 moveTo 和一个抽象方法 zoom,其中 moveTo 将图形从当前位

Scala实验二——2.模拟图形绘制

题目: 对于一个图形绘制程序,用下面的层次对各种实体进行抽象.定义一个 Drawable 的特 质,其包括一个 draw 方法,默认实现为输出对象的字符串表示.定义一个 Point 类表示点, 其混入了 Drawable 特质,并包含一个 shift 方法,用于移动点.所有图形实体的抽象类为 Shape,其构造函数包括一个 Point 类型,表示图形的具体位置(具体意义对不同的具体图 形不一样).Shape 类有一个具体方法 moveTo 和一个抽象方法 zoom,其中 moveTo 将图形从

第68课 基础图形绘制(下)

1. 简易绘图程序 (1)功能需求 ①自由图形绘制 ②基本图形绘制(直线.矩形和椭圆) ③能够选择图形绘制颜色 (2)界面解决方案 ①以QWidget为基类创建绘图主窗口 ②使用QGroupBox创建图形设置区域 ③使用单选按钮QRadioBox实现目标图形的选择 ④使用组合框QCombox实现绘图颜色的选择 2. 自由绘图的实现 (1)自由绘图的本质是跟踪鼠标的移动轨迹:因此,必须考虑什么时候开始?什么时候结束?以及如何记录鼠标移动? (2)从绘图参数的角度,可以将己经绘制结束的图形与正在绘制

图形绘制 Canvas Paint Path 详解

图形绘制简介        Android中使用图形处理引擎,2D部分是android SDK内部自己提供,3D部分是用Open GL ES 1.0.大部分2D使用的api都在android.graphics和android.graphics.drawable包中.他们提供了图形处理相关的Canvas.ColorFilter.Point.RetcF等类,还有一些动画相关的AnimationDrawable.BitmapDrawable.TransitionDrawable等.       以图形

Scala实验任务二

任务要求: 对于一个图形绘制程序,用下面的层次对各种实体进行抽象.定义一个 Drawable 的特 质,其包括一个 draw 方法,默认实现为输出对象的字符串表示.定义一个 Point 类表示点, 其混入了 Drawable 特质,并包含一个 shift 方法,用于移动点.所有图形实体的抽象类为Shape,其构造函数包括一个 Point 类型,表示图形的具体位置(具体意义对不同的具体图 形不一样).Shape 类有一个具体方法 moveTo 和一个抽象方法 zoom,其中 moveTo 将图形从

iOS:quartz2D绘图(给图形绘制阴影)

quartz2D既可以绘制原始图形,也可以给原始图形绘制阴影. 绘制阴影时,需要的一些参数:上下文.阴影偏移量.阴影模糊系数 注意:在对绘制的图形做了绘制阴影处理前,需要先对上下文进行保存,绘制阴影成功后,还要对上下文进行复位.目的是为了不影响后面的绘图操作. 举例的阴影绘制实例如下: 1.自定义一个视图类DemoView,并将控制器的视图关联该自定义类,同时在该定义类中重写- (void)drawRect:(CGRect)rect,将绘制无阴影图形和绘制阴影图形的调用方法写在里面.     

【Windows编程】系列第五篇:GDI图形绘制

上两篇我们学习了文本字符输出以及Unicode编写程序,知道如何用常见Win32输出文本字符串,这一篇我们来学习Windows编程中另一个非常重要的部分GDI图形绘图.Windows的GDI函数包含数百个API可供我们使用,本篇把最常用的GDI绘图做一个讲解.GDI可以绘制点.直线曲线.填充封闭区域.位图以及文本,其中文本部分已经在上一篇中将了,请参考[Windows编程]系列第三篇:文本字符输出. 跟前面的GDI对象一样,本篇的这些绘图函数也必须要设备上下文句柄(HDC)作为函数参数,从前文我

CSS各种图形绘制

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>绘图</title> <style type="text/css"> div{ background:black; } /*绘正方形*/ .square{ width:100px; height:100px; } /*绘长方形*/ .retangle{ width:

JAVA学习之JAVA 2D图形绘制

最近一直没有空写博客,事情比较多,静不下心,事情顺其自然好了,有些事我也不懂为什么会变成现在这样,你以为你付出了你最珍贵的,但或许别人并不喜欢.算了,不多想,顺其自然好了. JAVA在图形绘制方面效率跟不上C++,但是我觉得JAVA也有其在图形方面的一些优势,不过对于大型桌面游戏就不行了,估计连流畅度都不能保证. 下面给出最近写的代码: package draw; import java.awt.*; import javax.swing.*; import java.awt.geom.*; p