获得一系列不连续值的算法

时间:2015-02-23 04:47:21

标签: c# algorithm

我正试图画出一个"破坏"椭圆通过:

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度。

但是,如果我想要这样的椭圆(假设已知切断点),该怎么办? enter image description here

既然角度不是连续值(因为有效角度是大约100-360度和0-70度),是否有算法来量化有效角度的范围?如果是这样,数据结构应该是什么样的?

1 个答案:

答案 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