|
|
@@ -0,0 +1,141 @@
|
|
|
+package main
|
|
|
+
|
|
|
+import (
|
|
|
+ "fmt"
|
|
|
+ "math"
|
|
|
+)
|
|
|
+
|
|
|
+/*
|
|
|
+设计一个图形工作室的绘图与处理系统,具体要求如下:
|
|
|
+
|
|
|
+1. 制定绘图标准,要求所有图形都能完成两项基础工作:
|
|
|
+ - 生成绘制说明(返回字符串,描述绘制过程)
|
|
|
+ - 计算占用面积(返回float64类型的面积数值)
|
|
|
+*/
|
|
|
+type Drawer interface {
|
|
|
+ Draw() string
|
|
|
+ Area() float64
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+2. 制定扩展处理标准,要求部分图形支持尺寸调整功能:
|
|
|
+ - 按比例缩放(接收一个倍数参数,调整图形的大小)
|
|
|
+*/
|
|
|
+
|
|
|
+type Resizer interface {
|
|
|
+ Scale(factor float64)
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+3. 创建3种具体图形:
|
|
|
+ - 圆形:包含半径属性
|
|
|
+ - 矩形:包含长和宽属性
|
|
|
+ - 三角形:包含底边长和高属性
|
|
|
+*/
|
|
|
+
|
|
|
+type Circle struct {
|
|
|
+ Radius float64
|
|
|
+}
|
|
|
+
|
|
|
+type Rectangle struct {
|
|
|
+ Width float64
|
|
|
+ Height float64
|
|
|
+}
|
|
|
+
|
|
|
+type Triangle struct {
|
|
|
+ Base float64
|
|
|
+ Height float64
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+4. 让所有图形都符合绘图标准:
|
|
|
+ - 绘制说明要体现图形特征,如"绘制圆形(半径:10cm)"
|
|
|
+ - 占用面积要根据各自图形的计算公式得出
|
|
|
+*/
|
|
|
+// 圆形特征
|
|
|
+func (c Circle) Draw() string {
|
|
|
+ return fmt.Sprintf("绘制圆形(半径:%.2fcm)", c.Radius)
|
|
|
+}
|
|
|
+
|
|
|
+// 圆形面积
|
|
|
+func (c Circle) Area() float64 {
|
|
|
+ return math.Pi * c.Radius * c.Radius
|
|
|
+}
|
|
|
+
|
|
|
+// 矩形特征
|
|
|
+func (r Rectangle) Draw() string {
|
|
|
+ return fmt.Sprintf("绘制矩形(长:%.2fcm, 宽:%.2fcm)", r.Width, r.Height)
|
|
|
+}
|
|
|
+
|
|
|
+// 矩形面积
|
|
|
+func (r Rectangle) Area() float64 {
|
|
|
+ return r.Width * r.Height
|
|
|
+}
|
|
|
+
|
|
|
+// 三角形特征
|
|
|
+func (t Triangle) Draw() string {
|
|
|
+ return fmt.Sprintf("绘制三角形(底边:%.2fcm, 高:%.2fcm)", t.Base, t.Height)
|
|
|
+}
|
|
|
+
|
|
|
+// 三角形面积
|
|
|
+func (t Triangle) Area() float64 {
|
|
|
+ return 0.5 * t.Base * t.Height
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+5. 让圆形和矩形额外符合扩展处理标准,实现尺寸调整功能(三角形暂不支持缩放)
|
|
|
+*/
|
|
|
+// 圆形缩放
|
|
|
+func (c Circle) Scale(factor float64) {
|
|
|
+ c.Radius *= factor
|
|
|
+}
|
|
|
+
|
|
|
+// 矩形缩放
|
|
|
+func (r Rectangle) Scale(factor float64) {
|
|
|
+ r.Width *= factor
|
|
|
+ r.Height *= factor
|
|
|
+}
|
|
|
+
|
|
|
+// 三角形缩放(不支持)
|
|
|
+
|
|
|
+/*
|
|
|
+6. 编写两个通用处理工具:
|
|
|
+ - 图形信息统计工具:接收符合绘图标准的图形,输出其绘制说明和占用面积
|
|
|
+ - 尺寸调整工具:接收任意图形,检查其是否支持尺寸调整,如果支持则将其放大1.5倍,否则提示"该图形不支持尺寸调整"
|
|
|
+*/
|
|
|
+// 打印图形基础信息
|
|
|
+func PrintInfo(d Drawer) {
|
|
|
+ fmt.Println("基础信息:")
|
|
|
+ fmt.Println("绘图说明:", d.Draw())
|
|
|
+ fmt.Printf("占用面积: %.2f cm²\n", d.Area())
|
|
|
+}
|
|
|
+
|
|
|
+// 缩放 (不支持三角形)
|
|
|
+func Scale(d Drawer, factor float64) {
|
|
|
+ fmt.Println("尺寸调整:")
|
|
|
+ if resizer, ok := d.(Resizer); ok {
|
|
|
+ resizer.Scale(factor)
|
|
|
+ fmt.Printf("已放大 %.2f 倍\n", factor)
|
|
|
+ } else {
|
|
|
+ fmt.Println("该图形不支持尺寸调整")
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+7. 在系统主程序中创建各种图形实例,分别使用上述两个工具进行处理测试
|
|
|
+要求:通过统一的标准对不同图形进行处理,展现相同操作在不同图形上的差异化表现,以及部分图形具有特殊处理能力的特性。
|
|
|
+*/
|
|
|
+func main() {
|
|
|
+ circle := Circle{Radius: 10}
|
|
|
+ rectangle := Rectangle{Width: 10, Height: 20}
|
|
|
+ triangle := Triangle{Base: 10, Height: 20}
|
|
|
+
|
|
|
+ PrintInfo(circle)
|
|
|
+ Scale(circle, 1.5)
|
|
|
+
|
|
|
+ PrintInfo(rectangle)
|
|
|
+ Scale(rectangle, 1.5)
|
|
|
+
|
|
|
+ PrintInfo(triangle)
|
|
|
+ Scale(triangle, 1.5)
|
|
|
+}
|