【Godot4.2】求沿任意直线对称的点的坐标

news2024/10/7 12:20:00

概述

求一个点沿任意直线对称的点的坐标,这是一个简单的初中几何问题,如果用传统的求解思路,就是用公式,解方程组。但是作为Godot的使用者,要深谙向量的魅力。
我们绘制如下的图来分析:
image.png

  • 对称轴L可以被理解为一个向量
  • A点也可以理解为一个从坐标系原点指向(x1,y1)的向量
  • A向量与X轴的夹角为σ
  • L向量与X轴的夹角为θ
  • A向量与对称轴L向量的夹角θ'=σ-θ
  • 那么B点坐标就可以通过A向量旋转2θ'求得。
  • 如果L不经过原点,那么只需要加上偏移值offset就可以了

测试

原理和思路有了,接下来测试。创建如下测试场景:

image.png

设定窗口拉伸模式:

image.png

添加如下代码:

extends Control

var dcz = Vector2(-1,1)  # 对称轴
var dcz_length = 200.0  # 对称轴长度
@export var dcz_color:Color = Color.WHITE
@export var point_a_color:Color = Color.WHITE
@export var point_b_color:Color = Color.WHITE

var point_a:Vector2    # 点A


func _input(event):
	if event is InputEventMouseMotion:
		point_a = event.position
		queue_redraw()

func _draw():
	var window_rect:Rect2 = get_rect()             # 控件矩形
	var center:Vector2 = window_rect.get_center()  # 矩形中心
	
	# 在控件中心绘制坐标轴
	draw_line(Vector2(center.x,0),Vector2(center.x,size.y),Color.WHITE,2)
	draw_line(Vector2(0,center.y),Vector2(size.x,center.y),Color.WHITE,2)
	
	# 绘制对称轴
	draw_line(center,center + dcz * dcz_length,dcz_color,2)
	
	# 绘制点A
	draw_circle(point_a,3,point_a_color)
	
	# 求对称点B坐标
	var a = point_a - center  # A点向量的实际值
	var s = a.angle() - dcz.angle()
	var b = a.rotated(- s * 2.0)
	var point_b = b + center
	
	# 绘制对称点B
	draw_circle(point_b,3,point_b_color)

其中:

  • dcz为对称轴,用一个向量表示,为了显示的清楚,将其乘以dcz_length
  • 可以分别设定对称轴、A点和B点的颜色:

image.png

实际测试:

沿任意直线对称2.gif
沿任意直线对称3.gif

沿任意直线对称4.gif

沿任意直线对称5.gif

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

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

相关文章

使用python开发GUI程序-用网页做界面

1.背景 之前一直使用PysimpleGUI来做带图形界面的程序,每次都需要编译成exe发给别人用,一来版本更新就要通知挨个通知更新,二来显示的界面也比较丑,要看大面积的数据,就不方便。 今天午餐时问了一下AI,把…

德人合科技|办公电脑文件资料防泄密软件

#天锐绿盾# 办公电脑文件资料防泄密软件通常具备以下几个关键功能来保障公司敏感信息的安全: PC端: https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 1. 文件透明加密: 这是此类软件的核心功能之一&#xff…

vant4中如何修改Dialog弹框内容的字体大小

最近在开发一个移动端的需求,用的UI组件库是vant4 简单地总结一下,如何修改Dialog弹框内容的字体大小 我们先看一下Dialog弹框简单的使用 import { showConfirmDialog } from vant;showConfirmDialog({title: 标题,message:如果解决方法是丑陋的&#…

docker小白第十二天

docker小白第十二天 docker network简介 docker不启动时默认的网络情况。 # 停止docker服务 systemctl stop docker.socket systemctl stop docker # 查看docker镜像 docker images输入查看docker镜像命令后,显示未连接到docker服务器 docker启动时网络情况 sy…

Java毕业设计 基于springboot vue招聘网站 招聘系统

Java毕业设计 基于springboot vue招聘网站 招聘系统 springboot vue招聘网站 招聘系统 功能介绍 用户:登录 个人信息 简历信息 查看招聘信息 企业:登录 企业信息管理 发布招聘信息 职位招聘信息管理 简历信息管理 管理员:注册 登录 管理员…

【智能算法】平衡优化器(EO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.代码实现4.参考文献 1.背景 2020年,Afshin Faramarzi等人受到估计动态和平衡状态的控制体积质量平衡模型启发,提出了平衡优化器(Equilibrium Optimizer, EO)。(PS:酒桶摇摇晃晃~&…

哪里找视频素材大全无水印,推荐五个超棒的视频素材网站

嘿,小伙伴们!你们是不是在找视频素材大全无水印?别着急,我这就给你们推荐五个超棒的视频素材网站,让你的视频创作更加出彩! 蛙学网:蛙学网是个适合国内创作者的好去处,这里有大量的视…

toapi,一个强大的 Python Web API库!

目录 前言 什么是 Python Toapi 库? 核心功能 使用方法 1. 安装 Toapi 库 2. 创建 Toapi 应用 3. 定义规则和过滤器 4. 运行 Toapi 应用 实际应用场景 1. 数据提取与分析 2. 自动化爬虫和数据抓取 3. 构建自定义搜索引擎 高级功能和进阶用法 1. 动态页面渲染 …

读《Cheating Depth: Enhancing 3D Surface Anomaly Detection via Depth Simulation》

WCAV2024 摘要&引言 RGB骨干:某些表面异常仅在RGB中实际上仍然是看不见的,因此需要合并三维信息(确实重点在于“合并”,单纯看例子里的深度图片也看不出来异常在哪里,但是和rgb overlay之后就明显一些了&#xf…

【开源】SpringBoot框架开发学生综合素质评价系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生功能2.2 教师功能2.3 教务处功能 三、系统展示四、核心代码4.1 查询我的学科竞赛4.2 保存单个问卷4.3 根据类型查询学生问卷4.4 填写语数外评价4.5 填写品德自评问卷分 五、免责说明 一、摘要 1.1 项目介绍 基于J…

WebAssembly探索篇(三)emcc和cmake编译opencv案例

文章目录 开发环境安装opencv环境 实践出真知完整项目效果图 踩坑fatal error: opencv2/opencv.hpp file not found增加软链ln(无效)改用自行安装opencv,再显示指定lib路径 emcc命令行运行方式 最近因为项目原因,研究了一下WebAss…

NCV7321D11R2G收发器中文资料PDF数据手册引脚图参数图片价格芯片概述特性原理

产品概述: NCV7321 是一款全功能局部互联网 (LIN) 收发器,适用于 LIN 协议控制器和物理总线之间的接口。该收发器以 I3T 技术实施,可实现高电压模拟电路和数字功能在同一个芯片上的共存。NCV7321 LIN 器件属于车内联网 (IVN) 收发器系列。LI…

【鸿蒙HarmonyOS开发笔记】常用组件介绍篇 —— TextInput文本输入组件

概述 TextInput为文本输入组件,用于接收用户输入的文本内容。 参数 TextInput组件的参数定义如下 TextInput(value?:{placeholder?: string|Resource , text?: string|Resource})● placeholder placeholder属性用于设置无输入时的提示文本,效果…

基于tcp协议的网络通信(基础echo版.多进程版,多线程版,线程池版),telnet命令

目录 基础版 思路 辅助函数 服务端 代码 运行情况 -- telnet ip 端口号 传输的数据为什么没有转换格式 客户端 思路 代码 多进程版 引入 问题 解决 注意点 服务端 代码 运行情况 进程池版(简单介绍) 多线程版 引入 问题解决 注意点 服务端 代码 …

Java微服务分布式事务框架seata

🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 往期热门专栏回顾 专栏…

SSH远程连接断开后,程序继续运行

1、问题 我们在使用SSH连接远程服务器跑代码的时候,可能会遇到 代码需要跑很久 的情况,你可能会想 断开远程连接,但是,代码仍然要继续跑。 (eg: 晚上关电脑,但是想让代码继续跑着,第二天想看结果) 2、scre…

JSONP漏洞详解

目录 同源策略 JSONP简介 JSONP劫持漏洞 漏洞原理 漏洞利用过程 利用工具 JSONP漏洞挖掘思路 JSONP防御 首先,要了解一下什么是同源策略? 同源策略 同源策略(SOP)是浏览器的一个安全基石,浏览器为了保证数据…

使用 Jenkins 管道在 Docker Hub 中构建 Docker 镜像

Jenkins Pipeline 是一个强大的工具,可以自动执行部署。在各个阶段之间拆分的灵活和自定义操作是尝试此功能的一个很好的理由。 构建您自己的 Docker 镜像并将其上传到 Docker Hub 以保持存储库更新是了解 Jenkins Pipeline 如何改进您的工作方式的一个很好的示例。…

详细分析Python装饰器(附Demo)

目录 前言1. 基本知识2. 无参装饰器3. 有参装饰器4. 多个装饰器 前言 装饰器类似Java的切点切面增强 推荐阅读: 详细分析Spring中的Around注解(附Demo)java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全&#xff0…

如何实现Git Push之后自动部署到服务器?

在平时个人开发的过程中是不是有这样的烦恼: 项目开发完成,Push之后 登录服务器,手动git pull,然后运行部署命令 这真的很烦诶! 那么能不能Git push之后,远端服务器自动 Git pull 然后运行部署命令呢&a…