当前位置: 首页 > news >正文

【Godot4.3】胶囊形的偏移获取法

概述

之前用半圆弧拼接的方式求过胶囊形,在逐渐熟练使用Geometry2D的过程中,发现通过线段求端点是圆角类型的偏移多边形,获得的就是胶囊形。

所以我们有了第二种胶囊形求法。

测试代码

@tool
extends Node2D## 横向宽度
@export var width:float = 100.0:set(val):width = valqueue_redraw()## 偏移半径
@export var r:int = 20:set(val):r = valqueue_redraw()func _draw() -> void:var half_x = width/2.0 - rvar points = [Vector2.LEFT * half_x,Vector2.RIGHT * half_x]var polygon = Geometry2D.offset_polygon(points,r,Geometry2D.JOIN_ROUND)[0]polygon.append(polygon[0]) # 闭合draw_polyline(polygon,Color.AQUAMARINE,1)   # 绘制胶囊形draw_polyline(points,Color.WHITE,1)   # 绘制线段

测试效果

总结函数

# 基于多边形偏移的胶囊形求取函数
func capsule(width:float,radius:float) ->PackedVector2Array:var half_x = width/2.0 - radiusvar points = [Vector2.LEFT * half_x,Vector2.RIGHT * half_x]var polygon = Geometry2D.offset_polygon(points,radius,Geometry2D.JOIN_ROUND)[0]polygon.append(polygon[0]) # 闭合return polygon

应用:胶囊链

通过将上面的胶囊形求法应用于链形结构,可以获得胶囊链的效果。

为了方便所有链结构使用,我为Chain类型,添加了一个draw_capsules方法,代码如下:

# 绘制胶囊
func draw_capsules(canvas:CanvasItem,r:=10.0,color:=Color.WHITE,fill:=true,border_width:=1.0) -> void:for i in range(points.size()-1):var seg = [points[i],points[i+1]]var len = lens[i]var capsule = Geometry2D.offset_polygon(seg,r,Geometry2D.JOIN_ROUND)[0]capsule.append(capsule[0]) # 闭合if fill:canvas.draw_colored_polygon(capsule,color)else:canvas.draw_polyline(capsule,color,border_width)

在这里插入图片描述

总结

这只是一个基于Geometry2D改变特殊图形求取思路的案例之一,实际上通过偏移、布尔运算,你可以用几行代码求出一些原先用向量旋转、向量加减法以及线性变换思路弯弯绕半天的图形。


http://www.mrgr.cn/news/32942.html

相关文章:

  • java实现LRU 缓存
  • [python]从零开始的PySide安装配置教程
  • 操作系统篇
  • Vue.js与Flask后端配合
  • linux网络编程5
  • Dell R720 使用 ESXI 系统直通 p40 等显存大于16g 的显卡使用 EFI 引导无法打开虚拟机。
  • C++——模板初阶
  • 智慧校园建设解决方案建设系统简介
  • C Prime Plus 第6章习题
  • 索引的使用
  • Hadoop的安装
  • 【推广】图书|2024新书《大模型RAG实战:RAG原理、应用与系统构建》汪鹏、谷清水、卞龙鹏等,机械工业出版社
  • CDVAE项目环境配置
  • cv环境设置
  • expressjs 如何封装接口响应数据
  • 用 HTML + JavaScript DIY 一个渐进式延迟法定退休年龄测算器
  • Linux操作系统面试题记录
  • 行阶梯形矩阵的定义,通过正例和反例说明如何判断一个矩阵是不是行阶梯形矩阵
  • iTerm2下载并配置
  • nacos适配人大金仓的数据库