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