我正试图画出一个"破坏"椭圆通过:
PointF p;
List<IntPoint> list;
int res = 1000;
for(int i = 0; i < res; ++i)
{
if(i <= 250) // do nothing
else
{
p.X = h + a * Math.Cos(i/res * Math.PI * 2);
p.Y = k + b * Math.Sin(i/res * Math.PI * 2);
list.Add(p);
}
}
此代码将关闭椭圆的前1/4并将有效点存储在list
中。在这种情况下,很容易说有效角度的范围是90到360度。
但是,如果我想要这样的椭圆(假设已知切断点),该怎么办?
既然角度不是连续值(因为有效角度是大约100-360度和0-70度),是否有算法来量化有效角度的范围?如果是这样,数据结构应该是什么样的?
答案 0 :(得分:0)
角度包裹。所以你可以将(100,360)+(0,70)视为(100,360)+(360,430),即它只是(100,430)。
int startAngle = 100;
int endAngle = 430;
PointF p;
List<IntPoint> list;
int res = 1000;
for(int i = startAngle*res/360; i <= endAngle*res/360; ++i)
{
p.X = h + a * Math.Cos(i/res * Math.PI * 2);
p.Y = k + b * Math.Sin(i/res * Math.PI * 2);
list.Add(p);
}
我已将代码留在您的附近,但除非有特定原因,否则您可能希望使用浮点而不是int
。