main.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. package main
  2. import (
  3. "fmt"
  4. "math"
  5. )
  6. /*
  7. 设计一个图形工作室的绘图与处理系统,具体要求如下:
  8. 1. 制定绘图标准,要求所有图形都能完成两项基础工作:
  9. - 生成绘制说明(返回字符串,描述绘制过程)
  10. - 计算占用面积(返回float64类型的面积数值)
  11. */
  12. type Drawer interface {
  13. Draw() string
  14. Area() float64
  15. }
  16. /*
  17. 2. 制定扩展处理标准,要求部分图形支持尺寸调整功能:
  18. - 按比例缩放(接收一个倍数参数,调整图形的大小)
  19. */
  20. type Resizer interface {
  21. Scale(factor float64)
  22. }
  23. /*
  24. 3. 创建3种具体图形:
  25. - 圆形:包含半径属性
  26. - 矩形:包含长和宽属性
  27. - 三角形:包含底边长和高属性
  28. */
  29. type Circle struct {
  30. Radius float64
  31. }
  32. type Rectangle struct {
  33. Width float64
  34. Height float64
  35. }
  36. type Triangle struct {
  37. Base float64
  38. Height float64
  39. }
  40. /*
  41. 4. 让所有图形都符合绘图标准:
  42. - 绘制说明要体现图形特征,如"绘制圆形(半径:10cm)"
  43. - 占用面积要根据各自图形的计算公式得出
  44. */
  45. // 圆形特征
  46. func (c Circle) Draw() string {
  47. return fmt.Sprintf("绘制圆形(半径:%.2fcm)", c.Radius)
  48. }
  49. // 圆形面积
  50. func (c Circle) Area() float64 {
  51. return math.Pi * c.Radius * c.Radius
  52. }
  53. // 矩形特征
  54. func (r Rectangle) Draw() string {
  55. return fmt.Sprintf("绘制矩形(长:%.2fcm, 宽:%.2fcm)", r.Width, r.Height)
  56. }
  57. // 矩形面积
  58. func (r Rectangle) Area() float64 {
  59. return r.Width * r.Height
  60. }
  61. // 三角形特征
  62. func (t Triangle) Draw() string {
  63. return fmt.Sprintf("绘制三角形(底边:%.2fcm, 高:%.2fcm)", t.Base, t.Height)
  64. }
  65. // 三角形面积
  66. func (t Triangle) Area() float64 {
  67. return 0.5 * t.Base * t.Height
  68. }
  69. /*
  70. 5. 让圆形和矩形额外符合扩展处理标准,实现尺寸调整功能(三角形暂不支持缩放)
  71. */
  72. // 圆形缩放
  73. func (c Circle) Scale(factor float64) {
  74. c.Radius *= factor
  75. }
  76. // 矩形缩放
  77. func (r Rectangle) Scale(factor float64) {
  78. r.Width *= factor
  79. r.Height *= factor
  80. }
  81. // 三角形缩放(不支持)
  82. /*
  83. 6. 编写两个通用处理工具:
  84. - 图形信息统计工具:接收符合绘图标准的图形,输出其绘制说明和占用面积
  85. - 尺寸调整工具:接收任意图形,检查其是否支持尺寸调整,如果支持则将其放大1.5倍,否则提示"该图形不支持尺寸调整"
  86. */
  87. // 打印图形基础信息
  88. func PrintInfo(d Drawer) {
  89. fmt.Println("基础信息:")
  90. fmt.Println("绘图说明:", d.Draw())
  91. fmt.Printf("占用面积: %.2f cm²\n", d.Area())
  92. }
  93. // 缩放 (不支持三角形)
  94. func Scale(d Drawer, factor float64) {
  95. fmt.Println("尺寸调整:")
  96. if resizer, ok := d.(Resizer); ok {
  97. resizer.Scale(factor)
  98. fmt.Printf("已放大 %.2f 倍\n", factor)
  99. } else {
  100. fmt.Println("该图形不支持尺寸调整")
  101. }
  102. }
  103. /*
  104. 7. 在系统主程序中创建各种图形实例,分别使用上述两个工具进行处理测试
  105. 要求:通过统一的标准对不同图形进行处理,展现相同操作在不同图形上的差异化表现,以及部分图形具有特殊处理能力的特性。
  106. */
  107. func main() {
  108. circle := Circle{Radius: 10}
  109. rectangle := Rectangle{Width: 10, Height: 20}
  110. triangle := Triangle{Base: 10, Height: 20}
  111. PrintInfo(circle)
  112. Scale(circle, 1.5)
  113. PrintInfo(rectangle)
  114. Scale(rectangle, 1.5)
  115. PrintInfo(triangle)
  116. Scale(triangle, 1.5)
  117. }