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

绘制恒线速度的参数曲线

假设一条参数曲线和某个参数 t 相关。
L:
x = f(t)
y = g(t)

如果我们绘制这条参数曲线的时候的,t是按比例增加的话。可能点的分布会不均匀。
那么按照什么公式来决定t的步长能让曲线的点分布均匀呢?

首先我们对参数曲线公式进行微分。

dx = df(t)
dy = dg(t)

那么 ds= sqrt( dx * dx + dy *dy)

于是 ds 跟 dt 的关系便建立起来了。

ds = sqrt( f'(t) * f'(t) + g'(t) * g'(t) ) * dt.
代入t = 0 跟 t=0时候的步长 dt(0)可以得到 t=0 时候ds(0) 。

根据需求。我们要保证以后每个dt(t)的值。 ds(t) = ds(0)
因此。得到

dt(t) = ds(0) / sqrt( f'(t) * f'(t) + g'(t) * g'(t) )
= dt(0) * sqrt( f'(0) * f'(0) + g'(0) * g'(0) ) / sqrt( f'(t) * f'(t) + g'(t) * g'(t) )

这样既可以绘制出等步长的恒线速度的参数曲线
 
例子椭圆


代码:

bool DrawEclips(float a , float b , HWND hWnd , HDC hdc)
{
RECT rect ;
GetClientRect(hWnd , &rect);
int cx = rect.right/2;
int cy = rect.bottom/2;
#define MYPI2 (3.1415926f*2.0f)
float dtheta0 = 9.0f/360.0 * MYPI2;
float theta = 0.0;
 float rt = MYPI2 / 1.5;
for(;;)
{
float dtheta = b * dtheta0 / sqrt( a *a * sin(theta) * sin(theta) + b * b * cos(theta) * cos(theta) );
float x = a * cos(theta);
float y = b * sin(theta);
int ix = cos(rt) *x - sin(rt)*y;
int iy = sin(rt) *x + cos(rt)*y;
 ix += cx ;
iy += cy ;
 if(theta >= MYPI2 ) break;
SetPixel(hdc, (int)ix , (int)iy , RGB(255,0,255));

theta += dtheta;
if(theta > MYPI2 ) theta = MYPI2;
}
return 1;
}

相关文章:

  • hibernate mysql sequence_hibernate 在mysql数据库上,利用sequence生成主键的另一种解决方法...
  • 抱SQL SERVER大腿之从巨大表中提炼非重复数据
  • 抱SQL SERVER大腿之我爱用视图
  • python初学往哪个方向比较容易_学习Python应该往哪个方向发展?
  • 学习Extjs与RoR的集成有感
  • python是什么工程_十年开发工程师告诉你python是做什么的,新手必看哦!
  • 硅谷游记
  • mysql custom 环境变量_mysql安装问题
  • 依然渐
  • mysql multi delete_mysql存储过程出现Unknown table 'a' in MULTI DELETE的解决办法
  • 活着的意义
  • python定义复数类complex使代码能够工作_定义一个复数类Complex,使得下面的代码能够工作...
  • java 生产者消费者问题_生产者消费者问题Java三种实现
  • Bézier Curve 简略论述(1)
  • 邮件标题乱码 java_Java mail 发送邮件 主题(标题)乱码
  • AngularJS指令开发(1)——参数详解
  • docker python 配置
  • Js基础知识(四) - js运行原理与机制
  • Mac转Windows的拯救指南
  • Node 版本管理
  • OSS Web直传 (文件图片)
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • vue-router 实现分析
  • Yii源码解读-服务定位器(Service Locator)
  • 关于使用markdown的方法(引自CSDN教程)
  • 简单数学运算程序(不定期更新)
  • 前端js -- this指向总结。
  • 如何实现 font-size 的响应式
  • 如何在 Tornado 中实现 Middleware
  • 手机端车牌号码键盘的vue组件
  • 小试R空间处理新库sf
  • C# - 为值类型重定义相等性
  • Hibernate主键生成策略及选择
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • #QT(一种朴素的计算器实现方法)
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (学习日记)2024.01.19
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (转)fock函数详解
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • *上位机的定义
  • .form文件_SSM框架文件上传篇
  • .NET 8.0 中有哪些新的变化?
  • .net core 6 集成和使用 mongodb
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .Net7 环境安装配置
  • .NET正则基础之——正则委托
  • @angular/cli项目构建--Dynamic.Form
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹
  • [20190416]完善shared latch测试脚本2.txt
  • [ai笔记4] 将AI工具场景化,应用于生活和工作
  • [AutoSAR 存储] 汽车智能座舱的存储需求