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

网站做全景图百度百科官网

网站做全景图,百度百科官网,wordpress文章页横幅,建设网站考虑因素概述 原文写于去年9月。一篇测试性的文章。 基于初始位置和初始速度的抛物线 # 抛物运动轨迹曲线 - 基于初始位置和初始速度计算 func projectile_motion_curve(start_pos:Vector2, # 物体的起始位置velocity:Vector2, # 初始速度nums:int, …

概述

原文写于去年9月。一篇测试性的文章。

基于初始位置和初始速度的抛物线

# 抛物运动轨迹曲线 - 基于初始位置和初始速度计算
func projectile_motion_curve(start_pos:Vector2,            # 物体的起始位置velocity:Vector2,             # 初始速度nums:int,                     # 取点的个数delta:=1.0,                   # 时间间隔,越小曲线越平滑g = 9.8                       # 重力加速度
) -> PackedVector2Array:var points:PackedVector2Arrayvar vx0 = Vector2.RIGHT * velocity.x # x轴方向的初始速度var vy0 = Vector2.DOWN * velocity.y  # y轴方向的初始速度var pos = start_posvar v = velocity# 计算轨迹点for t in range(nums):var v1 = vx0 * t * deltavar v2 = vy0 * t * delta +  Vector2.DOWN * (0.5 * g * pow(t * delta,2))v = v1 + v2pos = start_pos + vpoints.append(pos)return points

测试

# 抛物运动曲线测试
extends Node2D## 曲线和点颜色
@export var color:=Color.AQUAvar force = 50.0                   # 力的大小
var start_pos := Vector2(100,100)  # 物体起始位置
var velocity = Vector2()           # 初始的速度
var nums:int = 20                  # 取点的个数
var delta:=1.0                     # 时间间隔,越小曲线越平滑
var g = 9.8                        # 重力加速度func _process(delta: float) -> void:velocity = start_pos.direction_to(get_global_mouse_position()) * forcequeue_redraw()func _draw() -> void:var curve = projectile_motion_curve(start_pos,velocity,nums,delta,g)draw_polyline(curve,color,1)for p in curve:draw_circle(p,3,color)pass
  • 曲线点的个数由nums参数控制
  • 单位时间间隔由delta参数控制,越小,点之间的距离越小,绘制曲线后越平滑

delta= 1.0,nums=20
delta= 0.1,nums=200

基于指定两点的抛物线

也就是知道抛出点和目标点的抛物线。

# 抛物线轨迹 - 基于初始位置和目标位置
func projectile_motion_curve2(start_pos:Vector2,            # 物体的起始位置target_pos:Vector2,           # 目标位置delta:=1.0,                   # 时间间隔,越小曲线越平滑g = 9.8                       # 重力加速度
) -> PackedVector2Array:var points:PackedVector2Arrayvar d = target_pos - start_pos # 位移向量var t2:float = sqrt((2 * d.y) / g)#print(t)var velocity = Vector2.UP * 0 + Vector2.RIGHT * (d.x / t2)var vx0 = Vector2.RIGHT * velocity.x # x轴方向的初始速度var vy0 = Vector2.DOWN * velocity.y  # y轴方向的初始速度var pos = start_posvar v = velocity# 计算轨迹点for t in range(t2/delta):var v1 = vx0 * t * deltavar v2 = vy0 * t * delta +  Vector2.DOWN * (0.5 * g * pow(t * delta,2))v = v2 + v1pos = start_pos + vpoints.append(pos)if points.size() >0:if target_pos.distance_to(points[points.size()-1]) > 0.0:points.append(target_pos)return points

测试

# 抛物运动曲线测试
extends Node2D## 曲线和点颜色
@export var color:=Color.AQUAvar force = 50.0                   # 力的大小
var start_pos := Vector2(100,100)  # 物体起始位置
var target_pos:Vector2             # 目标位置
var delta:=1.0                     # 时间间隔,越小曲线越平滑
var g = 9.8                        # 重力加速度func _process(delta: float) -> void:target_pos = get_global_mouse_position()queue_redraw()func _draw() -> void:var curve = projectile_motion_curve2(start_pos,target_pos,delta,g)draw_polyline(curve,color,1)for p in curve:draw_circle(p,3,color)pass

delta= 1.0
delta= 0.1

改进,加入一定的抬高

其中: t = 2 ( 2 k + d y ) g t=\sqrt{\frac{2(2k+dy)}{g}} t=g2(2k+dy) 那么最高点的速度: ∣ v k ∣ = d x t |v_k|= \frac{d_{x}}{t} vk=tdx

又因为: t k = 2 k g t_k=\sqrt{\frac{2k}{g}} tk=g2k 所以 ∣ v k y ∣ = g ⋅ t k |v_{ky}|=g\cdot t_k vky=gtk

所以初始速度: v 0 = v k y + v k v_{0}=v_{ky} + v_{k} v0=vky+vk

当目标点的纵坐标在起始点的上方时:

其中: t = 2 ( 2 k + d y ) g t=\sqrt{\frac{2(2k+dy)}{g}} t=g2(2k+dy) 最高点的速度 ∣ v k ∣ = d x t |v_k|= \frac{d_{x}}{t} vk=tdx还是保持不变。

但是: ∣ v k y ∣ = g ⋅ t ( k + d y ) |v_{ky}|=g \cdot t_{(k+dy)} vky=gt(k+dy) t ( k + d y ) = 2 ( k + d y ) g t_{(k+dy)}=\sqrt{\frac{2(k+dy)}{g}} t(k+dy)=g2(k+dy)

# 抛物线轨迹 - 基于初始位置和目标位置 加入一定的抬高距离k
func projectile_motion_curve3(start_pos:Vector2,            # 物体的起始位置target_pos:Vector2,           # 目标位置k:=50.0,                      # 抬高距离delta:=1.0,                   # 时间间隔,越小曲线越平滑g = 9.8                       # 重力加速度
) -> PackedVector2Array:var points:PackedVector2Arrayvar d = target_pos - start_pos # 位移向量# 到目标位置的总时长var t2:float# 走距离k的时间var t1:float# 走距离k的时间var t3:floatvar vx0   # x轴方向的初始速度var vy0   # y轴方向的初始速度if target_pos.y < start_pos.y:t2 = sqrt(2.0 * (2.0 * k + abs(d.y)) / float(g))t3 = sqrt(2.0 * (k + abs(d.y)) / float(g))vy0 = Vector2.UP * (g * t3)else:t2 = sqrt(2.0 * (2.0 * k + d.y) / float(g))t1 = sqrt((2.0 * k)/ float(g))vy0 = Vector2.UP * (g * t1)vx0 = Vector2.RIGHT * (d.x/float(t2))# 初速度var velocity = vx0 + vy0var pos = start_posvar v = velocity# 计算轨迹点for t in range(t2/delta):var v1 = vx0 * t * deltavar v2 = vy0 * t * delta +  Vector2.DOWN * (0.5 * g * pow(t * delta,2))v = v2 + v1pos = start_pos + vpoints.append(pos)if points.size() >0:if target_pos.distance_to(points[points.size()-1]) > 0.0:points.append(target_pos)return points

测试:


可以看到,鼠标位置在起始点上方时,也可以显示曲线,但是不是太精确。

http://www.dtcms.com/wzjs/63220.html

相关文章:

  • markdown做网站编辑器网络推广客服好做吗
  • 2023免费b站推广网站郑州网络推广报价
  • 游戏开发与网站开发哪个难广州seo优化费用
  • 如何靠做网站赚钱吗全网营销推广是什么
  • 重庆建设网站首页店铺推广引流的方法
  • 视频网站备案怎么做网站制作软件
  • 东莞是不是有疫情苏州吴中区seo关键词优化排名
  • 在线免费网站北京百度科技有限公司电话
  • 站内营销推广方式网站推广模式
  • 网站首页做跳转什么是关键词搜索
  • 个人站长做哪些网站好做外贸网站哪家公司好
  • 有哪个网站教人做美食百度网盘客户端下载
  • 自助建站系统厂家互联网推广引流
  • 美国新冠肺炎疫情最新情况快速提升排名seo
  • 试用网站 建站包头整站优化
  • 住房和城乡建设部网站八大员企业营销策划及推广
  • 珠海网站建设哪家公司好2022年十大网络流行语发布
  • 手机网站关闭窗口代码软件定制开发公司
  • 用dw制作视频网站武汉百度seo网站优化
  • 郑州外贸网站建设商家网页优化怎么做
  • 深圳知名网站建设价格网站制作建设公司
  • 帮人做网站要怎么赚钱吗广东疫情最新消息今天又封了
  • 日本人真人做真爱免费的网站百度网站的网址是什么
  • 做网站申请域名空间百度账号登陆
  • 博客可以放自己做的网站营销伎巧第一季
  • 用网站模板给人做网站挣钱吗百度推送
  • 做网站需要准备的东西培训课程开发
  • 软文自助发稿软件开发 网站建设网络营销推广工具
  • 常营网站建设公司2024北京又开始核酸了吗今天
  • 百度免费建立网站营销软文是什么