「Mac玩转仓颉内测版49」小学奥数篇12 - 图形变换与坐标计算

本篇将通过 PythonCangjie 双语实现图形变换与坐标计算。这个题目帮助学生理解平面几何中的旋转、平移和对称变换,并学会用编程实现坐标变化。


关键词
  • 小学奥数
  • Python + Cangjie
  • 图形变换
  • 坐标计算

一、题目描述

编写一个程序,模拟以下三种图形变换:

  1. 平移变换:将点 (x, y) 平移 dxdy 个单位。
  2. 旋转变换:将点 (x, y) 绕原点顺时针旋转 θ 度。
  3. 对称变换:计算点 (x, y) 关于 x轴y轴 的对称点。

输入格式

  • 平移变换:输入 x, y, dx, dy
  • 旋转变换:输入 x, y, θ(角度)。
  • 对称变换:输入 x, y

输出格式:输出变换后的坐标,保留两位小数。


解题思路
  1. 平移变换公式x' = x + dxy' = y + dy
  2. 旋转变换公式
    • x' = x * cos(θ) + y * sin(θ)
    • y' = -x * sin(θ) + y * cos(θ)
  3. 对称变换
    • 关于 x 轴对称:y' = -y
    • 关于 y 轴对称:x' = -x

二、Python 实现
import math# 平移变换
def translate(x, y, dx, dy):return x + dx, y + dy# 旋转变换
def rotate(x, y, theta):rad = math.radians(theta)x_new = x * math.cos(rad) + y * math.sin(rad)y_new = -x * math.sin(rad) + y * math.cos(rad)return round(x_new, 2), round(y_new, 2)# 对称变换
def reflect(x, y):return -x, -y# 输入测试
x, y = map(float, input("请输入点的坐标 (x, y): ").split())
dx, dy = map(float, input("请输入平移量 (dx, dy): ").split())
theta = float(input("请输入旋转角度 θ: "))# 输出结果
print("平移后的坐标:", translate(x, y, dx, dy))
print("旋转后的坐标:", rotate(x, y, theta))
print("关于原点的对称点:", reflect(x, y))

三、Cangjie 实现
package cjcDemoimport std.convert.*    // 导入数据转换模块
import std.console.*    // 导入控制台输入输出模块
import std.format.*     // 导入格式化模块
import std.math.*       // 导入数学函数模块// 定义函数接收并转换用户输入为 Float64
func inputFloat(info: String): Float64 {print(info)  // 输出提示信息let number: Float64 = Float64.parse(Console.stdIn.readln().getOrThrow())  // 读取并转换输入return number
}func inputFloat2(info: String): (Float64, Float64) {print(info)  // 输出提示信息var arr: Array<String> = Console.stdIn.readln().getOrThrow().split(' ')return (Float64.parse(arr[0]), Float64.parse(arr[1]))
}// 自定义角度转弧度的函数
func toRadians(degrees: Float64): Float64 {let pi = 3.1415return degrees * pi / 180.0
}// 平移变换
func translate(x: Float64, y: Float64, dx: Float64, dy: Float64): (Float64, Float64) {return (x + dx, y + dy)
}// 旋转变换
func rotate(x: Float64, y: Float64, theta: Float64): (Float64, Float64) {let rad = toRadians(theta)  // 调用自定义的 toRadians 函数let x_new = x * cos(rad) + y * sin(rad)let y_new = -x * sin(rad) + y * cos(rad)return (x_new, y_new)
}// 对称变换
func reflect(x: Float64, y: Float64): (Float64, Float64) {return (-x, -y)
}// 主程序
main(): Int64 {let (x, y) = inputFloat2("请输入点的坐标 (x, y): ")let (dx, dy) = inputFloat2("请输入平移量 (dx, dy): ")let theta = inputFloat("请输入旋转角度 θ: ")let translated = translate(x, y, dx, dy)let rotated = rotate(x, y, theta)let reflected = reflect(x, y)println("平移后的坐标: (${translated[0].format("0.1")}, ${translated[1].format("0.1")})")println("旋转后的坐标: (${rotated[0].format("0.1")}, ${rotated[1].format("0.1")})")println("关于原点的对称点: (${reflected[0].format("0.1")}, ${reflected[1].format("0.1")})")return 0
}

四、图形展示(扩展部分)

以下代码使用 Python 生成一个图形,展示了图形的平移、旋转和对称变换。本部分为进阶内容,当前阶段不要求理解

from PIL import Image, ImageDraw, ImageFont# 创建画布
img = Image.new('RGB', (600, 400), color='white')
draw = ImageDraw.Draw(img)
font = ImageFont.load_default()# 绘制平移、旋转和对称变换的结果
draw.text((10, 10), "平移后的坐标: (3.0, 4.0)", fill="black", font=font)
draw.text((10, 50), "旋转后的坐标: (1.0, -1.0)", fill="black", font=font)
draw.text((10, 90), "关于原点的对称点: (-1.0, -1.0)", fill="black", font=font)# 保存图像
img_path = "geometric_transformations.png"
img.save(img_path)
print(f"图形已保存为 {img_path}")

生成的图像如下:
geometric_transformations.png


五、示例执行

示例 1

输入:
x, y = 1, 1
dx, dy = 2, 3
θ = 90
输出:
平移后的坐标: (3.0, 4.0)
旋转后的坐标: (1.0, -1.0)
关于原点的对称点: (-1.0, -1.0)

六、小结

通过这道图形变换与坐标计算的题目,学生学习了平移、旋转和对称的变换规则,并掌握了如何用编程实现这些几何计算。


上一篇: 「Mac玩转仓颉内测版48」小学奥数篇11 - 最大公约数与最小公倍数
下一篇: 「Mac玩转仓颉内测版50」小学奥数篇13 - 动态规划入门

作者:SoraLuna
链接:https://www.nutpi.net/thread?topicId=398
來源:坚果派
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/63673.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MBTI 16人格分析

文章目录 一、MBTI介绍二、十六种MBTI人格1.ESTJ&#xff1a;总经理2.ENTP&#xff1a;辩论家3.INTP&#xff1a;逻辑学家4.ISFJ&#xff1a;守卫者 三、4组人格分析1.E与I2.S与N3.T与F4.P与J 一、MBTI介绍 MBTI是一种人格类型理论模型。全称是“Myers-Briggs Type Indicator”…

2024 X-GAME 上海智能新能源汽车大数据竞赛决赛顺利举行,和鲸Heywhale连续五年助推新能源汽车产业发展

11月22日&#xff0c;第七届 X-GAME 上海智能新能源汽车大数据竞赛圆满落幕&#xff01;这是和鲸作为协办方第五年为 X-GAME 新能源汽车分析赛道提供全程支持&#xff0c;赋能新能源汽车的产业发展。自 2018 年首次举办以来&#xff0c;以“数联万物&#xff0c;车载未来”为主…

书生实战营第四期-进阶岛第六关-MindSearch 快速部署

一、开发环境配置 1、打开codespace主页&#xff0c;选择Blank模板进行创建 Codespaces 2、创建conda环境隔离并安装依赖 conda create -n mindsearch python3.10 -y conda init 因为是新建的codespace&#xff0c;在第一次创建conda环境时&#xff0c;需要conda init 然后再…

开发类似的同款小程序系统制作流程

很多老板想要开发一款和别人家类似的同款小程序系统&#xff0c;但是不知道该怎么开发制作&#xff0c;本文就为大家详细介绍一下开发类似的同款小程序的流程为大家做参考。 一、前期准备找到对标小程序&#xff1a;首先&#xff0c;需要找到你想要模仿的同款小程序&#xff0…

《操作系统 - 清华大学》6 -7:局部页面置换算法:Belady现象

文章目录 1. 定义2. LRU、FIFO和Clock的比较 1. 定义 局部页面置换算法的特点是针对一个正在运行的程序&#xff0c;它访问内存的情况&#xff0c;访问页的情况&#xff0c;来决定应该采取什么样策略&#xff0c;把相应的页替换出去&#xff0c;站在算法本身角度来考虑置换哪个…

Spring Boot 3 中Bean的配置和实例化详解

一、引言 在Java企业级开发领域&#xff0c;Spring Boot凭借其简洁、快速、高效的特点&#xff0c;迅速成为了众多开发者的首选框架。Spring Boot通过自动配置、起步依赖等特性&#xff0c;极大地简化了Spring应用的搭建和开发过程。而在Spring Boot的众多核心特性中&#xff…

maven报错“找不到符号“

问题 springboot项目 maven编译打包过程&#xff0c;报错"找不到符号" 解决 很多网上方法都试过&#xff0c;都没用 换jdk&#xff0c;把17->21

UnityShaderLab-实现溶解效果

实现思路&#xff1a; 使用一张噪声图&#xff0c;与一个Cut值计算&#xff08;加或减&#xff09;&#xff0c;将计算后的值赋值给Alpha,然后小于0的片段就被丢弃掉了。 ShaderGraph实现&#xff1a; ShaderLab实现&#xff1a; 效果&#xff1a; 未完待续。。。 参考链接…

分布式 令牌桶算法 总结

前言 相关系列 《分布式 & 目录》《分布式 & 令牌桶算法 & 总结》《分布式 & 令牌桶算法 & 问题》 参考文献 《【算法】令牌桶算法》 概述 简介 TBA Token Bucket Algorithm 令牌桶算法是一种流行于网络通信领域的流量控制/频率限制算法。令牌…

【JavaEE初阶】CSS

&#x1f384;CSS是什么&#xff1f; 层叠样式表 (Cascading Style Sheets). CSS 能够对网页中元素位置的排版进行像素级精确控制, 实现美化页面的效果. 能够做到页面的样式和结构分离. 用来美化HTML所写的界面&#xff0c;就如同化妆一样 &#x1f340;CSS基础语法规范 选…

【计网】HTTP协议详解

&#x1f30e;应用层协议Http 文章目录&#xff1a; 应用层协议Http 认识HTTP协议       认识URL Http协议请求与响应格式       HTTP Request       HTTP Response       HTTP常见Header       URI资源以及网页跳转原因 HTTP其他属性字段   …

Android上运行OpenCV(Android Studio)

用Android Studio的话&#xff0c;整体来说没什么难的&#xff0c;照着教程来做就好了。 【OpenCV】OpenCV库的安装 - Android与OpenCV系列教程_哔哩哔哩_bilibili 主要就是导入module&#xff0c;然后加入依赖。代码只有几行。 if(OpenCVLoader.initLocal()){Toast.makeText(…

openWebUI+ollamawindows+不用docker+webLite本地安装

openWebUI & ollama & windows & 不用docker & webLite 本地安装 总结一下安装教程 10核CPU16G内存 两个web框架都可以&#xff0c;先说简单的 ollama-webui-lite(https://github.com/ollama-webui/ollama-webui-lite) 轻量级&#xff0c;只使用nodejs 先装…

Linux下进程替换exec系列接口

文章目录 Linux下进程替换1. c库exec函数族一、exec函数族简介二、exec函数族函数原型及参数说明三、exec函数族的工作机制四、注意事项五、示例代码 2. 系统调用execve接口一、execve接口与C库exec函数族的关系二、函数原型三、参数说明四、工作原理五、返回值六、注意事项七、…

【一本通】质因数分解

【一本通】质因数分解 C语言实现C 语言实现Java语言实现Python语言实现 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 已知正整数n 是两个不同的质数的乘积&#xff0c;试求出较大的那个质数。 输入 输入只有一行&#xff0c;包含一个正…

xtu oj 1618 素数个数

文章目录 前言代码思路 前言 有点儿难&#xff0c;至少对我来说。去年考试我没写出来。 代码 #include<stdio.h> #include<stdbool.h> #include<stdlib.h>//加 math 那个头文件好像要加这个头文件&#xff0c;我之前编译错误过&#xff0c;血泪教训 #incl…

2024149读书笔记|Hans的阿狸五部曲——成长的路上分离在所难免

2024149读书笔记|Hans的阿狸五部曲——成长的路上分离在所难免 1. 《阿狸和小小云》2. 《阿狸和小玉》3. 《阿狸呓语》4. [202480读书笔记|《阿狸和弯月亮》——生的再普通&#xff0c;也是限量版](https://blog.csdn.net/qq_40985985/article/details/139731131)5. 《阿狸永远…

SQL项目实战与综合应用——项目设计与需求分析

项目设计与需求分析是软件开发过程中的核心环节&#xff0c;尤其在涉及数据库的应用时&#xff0c;良好的设计将直接影响到项目的可扩展性、性能和维护性。本文将深入探讨数据库设计的最佳实践&#xff0c;结合 C 与 SQL 的实际应用场景&#xff0c;涵盖项目需求收集、数据库设…

D3实现站点路线图demo分享

分享一下通过D3实现的站点路线分布图&#xff0c;这是一个demo。效果图如下&#xff1a; 源码如下&#xff1a; <template><div class"map-test" ref"d3Chart"><div class"tooltip" id"popup-element"><span>…

算法日记 42 day 图论

今天来看看广度优先搜索&#xff0c;并且写几个题。刷到这里我才想起来&#xff0c;当时第一次面试的时候问的就是这个题&#xff0c;当时大概知道一点思路&#xff0c;但不清楚是图论方面的&#xff0c;更别说写出来了。 广度优先搜索&#xff08;BFS&#xff09; 不同于深度…