热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

matlab生成不同的椭圆,[平面几何][Matlab]平面椭圆参数与一般式之间的转换

椭圆的一般式为:\[A{x^2}BxyC{y^2}DxEyF0\]椭圆的参数为:长半轴$a$短半轴$b$椭圆中心$(x_{0},y_{0})$倾角为$\

椭圆的一般式为:\[A{x^2} + Bxy + C{y^2} + Dx + Ey + F = 0\]

椭圆的参数为:长半轴 $a$短半轴 $b$  椭圆中心 $(x_{0},y_{0})$  倾角为 $\theta$ (定义逆时针为正,长轴与x正方向的夹角)

1.由椭圆参数转化为一般式:

推导过程:

椭圆 $C[3*3]$ ,中心在原点,长轴与x轴重合,经过旋转矩阵  ${R} =f({\theta})$ , 平移矩阵 ${T}$$ =$$g$$(x_{0},y_{0})$,

后得到

$C^{'}=T^{T}*R^{T}*C*R*T$

ps:关于旋转矩阵R和平移矩阵T的定义看上篇博文 直角坐标系下点/曲线平移与旋转的矩阵计算

即 $H({\theta},x_{0},y_{0},a,b)=A{x^2} + Bxy + C{y^2} + Dx + Ey + F $

对应相等可以得到:

①$A = \frac{{{{\cos }^2}\theta }}{{{a^2}}} + \frac{{{{\sin }^2}\theta }}{{{b^2}}}$

② $B = 2 \cdot \sin \theta  \cdot \cos \theta  \cdot (\frac{1}{{{a^2}}} - \frac{1}{{{b^2}}})$

③ $C = \frac{{{{\cos }^2}\theta }}{{{b^2}}} + \frac{{{{\sin }^2}\theta }}{{{a^2}}}$

④ $D =  - 2 \cdot [{x_0} \cdot (\frac{{{{\cos }^2}\theta }}{{{a^2}}} + \frac{{{{\sin }^2}\theta }}{{{b^2}}}) + {y_0} \cdot \sin \theta  \cdot \cos \theta  \cdot (\frac{1}{{{a^2}}} - \frac{1}{{{b^2}}})]$

⑤ $E =  - 2 \cdot [{x_0} \cdot \sin \theta  \cdot \cos \theta  \cdot (\frac{1}{{{a^2}}} - \frac{1}{{{b^2}}}) + {y_0} \cdot (\frac{{{{\cos }^2}\theta }}{{{b^2}}} + \frac{{{{\sin }^2}\theta }}{{{a^2}}})]$

⑥$F = \frac{{{{({x_0} \cdot \cos \theta  + {y_0} \cdot \sin \theta )}^2}}}{{{a^2}}} + \frac{{{{({x_0} \cdot \sin \theta  - {y_0} \cdot \cos \theta )}^2}}}{{{b^2}}} - 1$

matlab推导过程

+验证

clc

syms a b theta x0 y0

% 公式推导

C = [1/a.^2 0 0;

0 1/b.^2 0;

0 0 -1;];

Rot = [cos(theta) sin(theta) 0;

-sin(theta) cos(theta) 0;

0 0 1;];

T = [1 0 -x0;

0 1 -y0;

0 0 1;];

C1 = T'*Rot'*C*Rot*T;

%公式验证

as = a*a;

bs = b*b;

coss = cos(theta).^2;

sins = sin(theta).^2;

cs = sin(theta)*cos(theta);

A =coss/as+sins/bs;

B =2*cs*(1/as-1/bs);

C = coss/bs +sins/as;

D = -(2*A*x0 +B*y0);

E = -(B*x0 +2*A*y0);

F = (x0*cos(theta)+y0*sin(theta)).^2/as+(x0*sin(theta)-y0*cos(theta)).^2/bs-1

a = 3;

b = 2;

x0 = 1;

y0 = 0.5;

theta = 0.1;

A = eval(A)

B = eval(B)

C = eval(C)

D = eval(D)

E = eval(E)

F = eval(F)

syms x y

f1 = ezplot( A*x^2+ C*y^2 +F + B*x*y + D*x +E*y,[-2,6],[-2,6]);

set(f1,'Color','r','LineWidth',1.5)

xlim([-2,6])

ylim([-2,6])

axis equal

grid on

61be90f59fa90b0a384573c3ea4c4696.png

2.由一般式得到椭圆参数式:

椭圆的一般式为:\[A{x^2} + Bxy + C{y^2} + Dx + Ey + F = 0\]

由①②③式可以得到:

长半轴: $a^{2}=\frac{2}{A+C-\sqrt{B^{2}+(A-C)^{2}}}$

短半轴: $b^{2}=\frac{2}{A+C+\sqrt{B^{2}+(A-C)^{2}}}$

倾角:  ${\theta} = arcsin({ sign(-B) \sqrt{\frac{(Aa^{2}-Cb^{2})a^{2}b^{2}}{a^{4}-b^{4}}}})$

偏移:alpha = cos(theta).^2/a^2+sin(theta).^2/b^2;

beta = sin(theta)*cos(theta)*(1/a^2-1/b^2);

gama = cos(theta).^2/b^2+sin(theta).^2/a^2;

y0 = (E/2 - beta*D/(2*alpha))/(beta^2/alpha - gama)

x0 = (-D/2 - beta*y0)/alpha

%接上面程序运行

aa = 2/(A+C-sqrt(B^2+(A-C).^2))

bb = 2/(A+C+sqrt(B^2+(A-C).^2))

if(bb > aa)

temp = aa;

aa = bb;

bb = temp;

end

theta

theta2 = asin(sign(-B)*sqrt((A*aa-C*bb)*aa*bb/(aa*aa-bb*bb)))

a = sqrt(aa)

b = sqrt(bb)

alpha = cos(theta).^2/a^2+sin(theta).^2/b^2;

beta = sin(theta)*cos(theta)*(1/a^2-1/b^2);

gama = cos(theta).^2/b^2+sin(theta).^2/a^2;

y0 = (E/2 - beta*D/(2*alpha))/(beta^2/alpha - gama)

x0 = (-D/2 - beta*y0)/alpha

f86c1b34ea467cc4ad7d9ed31fa23c55.png



推荐阅读
  • 在处理木偶评估函数时,我发现可以顺利传递本机对象(如字符串、列表和数字),但每当尝试将JSHandle或ElementHandle作为参数传递时,函数会拒绝接受这些对象。这可能是由于这些句柄对象的特殊性质导致的,建议在使用时进行适当的转换或封装,以确保函数能够正确处理。 ... [详细]
  • async/await 是现代 JavaScript 中非常强大的异步编程工具,可以极大地简化异步代码的编写。本文将详细介绍 async 和 await 的用法及其背后的原理。 ... [详细]
  • 在处理大规模数据数组时,优化分页组件对于提高页面加载速度和用户体验至关重要。本文探讨了如何通过高效的分页策略,减少数据渲染的负担,提升应用性能。具体方法包括懒加载、虚拟滚动和数据预取等技术,这些技术能够显著降低内存占用和提升响应速度。通过实际案例分析,展示了这些优化措施的有效性和可行性。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 近日,我在处理一个复杂的前端问题时遇到了极大困扰。具体来说,我之前开发了一个功能丰富的纯jQuery代码的前端GridView控件,实现了多种功能和视觉效果,并在多个项目中表现良好。然而,最近在尝试应用 `border-box` 布局模式时,却遇到了意想不到的兼容性和性能问题。这提醒我们在条件尚未完全成熟的情况下,应谨慎使用 `border-box` 布局模式,以免引入不必要的复杂性和潜在的bug。 ... [详细]
  • 在图像处理领域,不同颜色空间的操作是常见的需求。为了将各种颜色空间的坐标转换至 [0,1] 范围内,了解常用颜色空间的具体坐标范围至关重要。本文详细解析了多种颜色空间的坐标范围,并提供了相应的转换方法和应用场景,帮助读者更好地理解和应用这些颜色空间。 ... [详细]
  • 在.NET框架中,DataFormatString用于对数据进行格式化显示。常见的格式化方式包括:数字格式(如“{0:N2}”表示保留两位小数的数字,结果为12.36),整数格式(如“{0:N0}”表示四舍五入到最接近的整数,结果为13),货币格式(如“{0:c2}”表示带有货币符号并保留两位小数,结果为$12.36),以及高精度货币格式(如“{0:c4}”表示带有货币符号并保留四位小数,结果为$12.3656)。这些格式化选项能够帮助开发者更灵活地控制数据的显示效果。 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • 在Java项目中,当两个文件进行互相调用时出现了函数错误。具体问题出现在 `MainFrame.java` 文件中,该文件位于 `cn.javass.bookmgr` 包下,并且导入了 `java.awt.BorderLayout` 和 `java.awt.Event` 等相关类。为了确保项目的正常运行,请求提供专业的解决方案,以解决函数调用中的错误。建议从类路径、依赖关系和方法签名等方面入手,进行全面排查和调试。 ... [详细]
  • SRM 553:深入解析供应链管理系统的最新进展与应用本文详细探讨了供应链管理系统(SCM)的最新发展及其在实际应用中的影响。通过对当前技术趋势的分析,文章揭示了 SCM 在提高效率、降低成本和增强透明度方面的关键作用。此外,还介绍了几种创新的 SCM 解决方案,如区块链技术和人工智能的应用,以及这些技术如何帮助企业更好地应对市场变化和挑战。 ... [详细]
  • 在面试过程中,面试官常常会提问如何使一个DIV元素实现水平和垂直居中。本文将详细介绍几种常用的实现方法。准备工作包括创建一个父容器和一个子容器,通过不同的CSS属性和技术手段,如Flexbox、Grid布局、绝对定位等,来实现DIV元素的精确居中效果。每种方法都有其适用场景和优缺点,读者可以根据具体需求选择最适合的方案。 ... [详细]
  • 在 LeetCode 题目 1351 中,任务是统计一个有序矩阵中的所有负数元素。该问题可以通过高效的方法来解决,例如利用矩阵的有序性进行二分查找或逐行遍历。具体实现中,可以通过遍历每一行并计算每行中负数的数量,最终累加得到整个矩阵的负数总数。这种方法不仅简洁,而且时间复杂度较低,适用于大规模数据处理。 ... [详细]
  • 利用 Python 中的 Altair 库实现数据抖动的水平剥离分析 ... [详细]
  • 在处理 GridView 中的行记录时,有时需要动态地添加或删除行,而无需对数据库中的实际数据进行任何更改。本文介绍了如何实现这一功能,确保操作仅限于前端展示层面,而不影响后端数据库的完整性。通过这种方法,用户可以在不修改数据库记录的情况下,灵活地管理 GridView 中的数据展示。 ... [详细]
  • 优化后的标题:数据网格视图(DataGridView)在应用程序中的高效应用与优化策略
    在应用程序中,数据网格视图(DataGridView)的高效应用与优化策略至关重要。本文探讨了多种优化方法,包括但不限于:1)通过合理的数据绑定提升性能;2)利用虚拟模式处理大量数据,减少内存占用;3)在格式化单元格内容时,推荐使用CellParsing事件,以确保数据的准确性和一致性。此外,还介绍了如何通过自定义列类型和优化渲染过程,进一步提升用户体验和系统响应速度。 ... [详细]
author-avatar
骄傲_yi2006
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有