dotnet C# 根据椭圆长度和宽度和旋转角计算出椭圆中心点的方法
本文来告诉大家如何根据椭圆长度和宽度和旋转角计算出椭圆中心点的方法
方法很简单,请看代码
/// <summary>
/// 辅助进行椭圆点计算的类
/// </summary>
/// 我觉得这个类应该是框架有带,或现成的方法,但是一时间没找到
static class EllipseCoordinateHelper
{
/// <summary>
/// 计算椭圆中点坐标
/// </summary>
/// <param name="widthRadius"></param>
/// <param name="heightRadius"></param>
/// <param name="rotationAngle"></param>
/// <returns></returns>
public static (Pixel x, Pixel y) GetEllipseCoordinate(Pixel widthRadius, Pixel heightRadius,
Degree rotationAngle)
{
// 以下为椭圆两个点的计算方法
// 算法请看 https://astronomy.swin.edu.au/cms/astro/cosmos/E/Ellipse
var absRotate = Math.Abs(rotationAngle.DoubleValue);
var rad = Math.Abs(absRotate - 90);
rad = rad * Math.PI / 180;
var tan = Math.Tan(rad);
var a = widthRadius.Value;
var b = heightRadius.Value;
var x = Math.Sqrt(1.0 / (1.0 / (a * a) + (tan * tan) / (b * b)));
var y = x * tan;
if (rotationAngle.DoubleValue < 0)
{
x = -x;
}
if (rotationAngle.DoubleValue > -90 && rotationAngle.DoubleValue < 90)
{
y = -y;
}
x = a + x;
y = b + y;
return (new Pixel(x), new Pixel(y));
}
}
我觉得以上是 WPF 框架有带的,但是一时半会没有找到在哪定义的,因此就自己写了一份
以上的 Pixel 和 Degree 的定义代码在 GitHub 上开源,请看 Office Open XML 的测量单位
其他计算请参阅 根据SVG Arc求出其开始角、摆动角和椭圆圆心 - RyzenAdorer - 博客园
dotnet C# 根据椭圆长度和宽度和旋转角计算出椭圆中心点的方法的更多相关文章
- 根据当前设备的宽度,动态计算出rem的换算比例,实现页面中元素的等比缩放
~function anonymous(window){ //根据当前设备的宽度,动态计算出rem的换算比例,实现页面中元素的等比缩放 let computedREM = function compu ...
- 编写一个矩形类,私有数据成员为矩形的长( len)和宽(wid),wid设置为0,有参构造函数设置和的值,另外,类还包括矩形的周长、求面积、取矩形的长度、取矩形的长度、取矩形的宽度、修改矩形的长度和宽度为对应的形参值等公用方法。
class Rectangle { private double len, wid; public Rectangle()//求矩形周长 { len = 0; wid = 0; } public Re ...
- Android开发经验之获取画在画布上的字符串长度、宽度(所占像素宽度)
Android中获取字符串长度.宽度(所占像素宽度) 计算出当前绘制出来的字符串有多宽,可以这么来! 方法1: Paint paint = new Paint(); Rect rect = new R ...
- css如何让<a>标签,根据输入的内容长度调整宽度,宽度自适应,那位大仙帮帮忙
css如何让<a>标签,根据输入的内容长度调整宽度,宽度自适应,那位大仙帮帮忙 5 样式 .ceshi{float:left; margin-left:13px; width:180px; ...
- 【c语言】数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字
题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 比如输入一个长度为9的数组{1,2.3.2,2.2.5,4.2}, 因为数组中数字2出现了5次,超过数组的长度的一半,因此输出2 ...
- GridView 子项长度和宽度一样
下面是gridview 控件,每行放置四个,因此用宽度除4. 下面展现出来的的界面就显的比较美观. public class HotSearchAdapter extends BaseAdapter ...
- [frontend] 根据文字长度 自适应宽度 自适应高度+ Uncaught ReferenceError: xxx is not defined at HTMLDivElement.onclick
CSS一行代码就可以解决第一个问题: 1.1 根据文字长度,自适应标签宽度 解决方法:把width的设置删掉,加一行代码 display:table; .tag-footdetail{ /*widt ...
- 对于div里面内容过大根据长度或者宽度进行适配,然后可以滚轮缩放的功能
在做3000的项目中,因为页面的svg很大,但是做的只是适配电脑,打开肯定是看不全的,要看全就必须进行滚动,可是客户提出了将页面放在电视机上面,用电视输入网址直接访问,这样问题就来了,电视上怎么进行滚 ...
- Android - 获取字符串长度的宽度
Paint paint = new Paint(); float strWidth = paint.measureText(String);
- EXCEL某列长度超过255个字符导入SQL SERVER的处理方法
问题描述: [Excel 源 [1]] 错误: 输出“Excel 源输出”(9) 上的 输出列“Description 3”(546) 出错.返回的列状态是:“文本被截断,或者一个或多个字符在目标代码 ...
随机推荐
- js 时间控件 日期多选
在开发的过程中,时间总是不可避免要出现的需求,这里给大家分享我比较常用的js 时间控件和一个问题的解决方法 layDate 官方文档地址:https://www.layui.com/laydate/ ...
- 记录--用three.js渲染真实的下雨效果
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 建模 首先我们需要一些贴图素材 贴图素材一般可以在3dtextures网站上找到,这里我找了2份,包含了墙的法线贴图和潮湿地面的法线.透明 ...
- Oracle日期加减
1.直接加减数字 SELECT SYSDATE "当前时间", SYSDATE + 1 "加一天", SYSDATE + (1 / 24) "加一小时 ...
- Python - inspect 模块的简单使用
Python中的inspect模块解析 Python的inspect模块是一个强大的内省工具,允许开发者检查(inspect)活动对象和源代码.它提供了一系列函数,用于获取信息关于正在运行的程序和调用 ...
- shk_to_bram
Entity: shk_to_bram File: shk_to_bram.v Diagram Description Company: FpgaPublish Engineer: FP Create ...
- KingbaseES 使用百分比函数获取中位数
客户从Oracle数据库迁移至KingbaseES数据库,应用中使用MEDIAN函数来求中位数.KingbaseES数据库中没有MEDIAN函数,但可以通过百分比函数来实现相应的功能. MEDIAN ...
- KingbaseES V8R6 集群环境备库不结束旧事务快照将影响主库的vacuum操作
前言 昨天同事遇到了一个有关vacuum的典型问题. V8R6读写分离集群环境,一主多备. 版本:kingbaseesv008r006c004 问题现象: 主库日常巡检发现日志大量记录: waring ...
- Python数据类型---列表、元祖、字典【详解】
一.列表(List) 1.列表可以用来存储不同的数据类型,使用 [ ] e.g. 1 service = ['http','ssh','ftp'] 2.列表是有索引的,也就是可以通过下标来访问数据 3 ...
- #线段树,二分#洛谷 2824 [HEOI2016/TJOI2016]排序
题目 分析 这排序就很难实现,考虑定一个基准,小于该基准的视为0,否则视为1, 那排序可以看作将0和1分开,这就很好用线段树实现了 如果该位置是0,说明这个基准太高,显然可以用二分答案(基准),那么时 ...
- Git分支教程:详解分支创建、合并、删除等操作
Git是一种强大的分布式版本控制系统,它的分支功能使得团队协作和代码管理变得更加灵活和高效.分支可以让开发人员在不影响主线开发的情况下进行并行开发和实验性工作.本篇博客将详解Git分支的创建.合并.删 ...