c++ - 椭圆旋转不居中
问题描述
我正在尝试绘制一个不以原点为中心的旋转椭圆(在 C++ 中)。
到目前为止,我的代码“有效”:
for (double i = 0; i <= 360; i = i + 1) {
theta = i*pi / 180;
x = (polygonList[compt]->a_coeff / 2) * sin(theta) + polygonList[compt]->centroid->datapointx;
y = (polygonList[compt]->b_coeff / 2) * cos(theta) + polygonList[compt]->centroid->datapointy;
xTmp = (x - polygonList[compt]->centroid->datapointx)* cos(angle1) - (y - polygonList[compt]->centroid->datapointy)*sin(angle1) + polygonList[compt]->centroid->datapointx;
yTmp = (x - polygonList[compt]->centroid->datapointx)* sin(angle1) + (y - polygonList[compt]->centroid->datapointy)*cos(angle1) + polygonList[compt]->centroid->datapointy;
}
PolygonList 是“块”的列表,它将被相同区域的椭圆替换。
我的问题是角度不是很精确,好像我必须放置一个适合我椭圆形状的量角器,量角器显然会被挤压,角度也会如此(清楚吗?)
这是一个示例:我试图在顶部椭圆 (E1) 上设置一个点,该点位于 E1 的质心与第二个椭圆 (E2) 上的任何点之间绘制的线上。在此示例中,点E2 上的角度约为 220-230 度。我能够捕捉到这个角度,这个角度看起来还可以。
问题是,如果我尝试通过使用 ~225 度的这个角度将这个点投影到 E1 上,我最终会出现在顶部的第二个红色圆圈上。看起来我的角度现在是 ~265 度,但实际上,如果我将量角器的形状调整为适合我的椭圆,我会得到正确的角度 (~225),cf img 2)
很难看到那个重新塑造的量角器上的角度,但它确实显示了 ~225 度。
我的结论是,椭圆的绘制就像我必须画一个圆然后我会压缩它,这会改变角度之间的距离。
有人可以告诉我如何解决这个问题吗?
PS:要绘制这些椭圆,我只需使用一个 for 循环,它会在每个角度(从 0 到 360)绘制一个点。我们在第一张图片上清楚地看到,无论我们是在 0 度还是在 90 度,点之间的距离都是不同的。
解决方案
您的参数化正是如此,圆是椭圆的情况,两个轴都相等。听起来您需要使用椭圆的理性表示而不是标准:https ://en.m.wikipedia.org/wiki/Ellipse
推荐阅读
- python - 如何为每个实体(多个分类字段)的每个缺失日期添加记录,并从值字段转发填充添加的条目?
- python - python字符串迭代的时间复杂度与for in
- sql - Querying an SQL table to get all new values in a column according to filter in another column
- javascript - jQuery 和 CSS3 中的文件输入自定义文本
- firefox - Mozilla Firefox 无头屏幕截图不适用于本地 HTML 文件
- google-cloud-platform - Google Cloud Spanner 插入速度很慢
- java - 调用不带参数的泛型函数
- jhipster-registry - mongodb与节点和快递的连接错误
- pdf - 使用颤振打印包,如何从 URL 打印 PDF?
- eslint - 忽略