【发布时间】:2018-05-28 11:54:16
【问题描述】:
我正在尝试绘制一个不以原点为中心的旋转椭圆(在 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 度,点之间的距离都是不同的。
【问题讨论】:
-
你到底想在这里问什么?你是什么意思你的角度不正确 - 角度是正确的,你只是在看两个不同的定义。在一种情况下,您查看极角,而在另一种情况下,您正在考虑用于参数化椭圆的“角度”。但你似乎画一个旋转的椭圆就好了。
-
抱歉,我的问题可能不清楚。我也很困惑,因为我对谈论几何并不是很有信心。我想我想问的是我应该如何为代表我的椭圆的每个点 360 点定义 X 和 Y。
-
您似乎有 360 个点,它们只是在椭圆上的间距不均匀。你所拥有的到底有什么问题?
-
理想情况下,我想要 360 点;它们中的每一个间隔 1 度角。在我的例子中,它们的间距不是 1 度弧
-
我明白了,所以基本上你想在第一张图片中的椭圆线的交叉点上点点(可能更密集,但这是基本想法)?在那种情况下,也许这正是您应该尝试解决的问题?