Ошибка в формуле точек полигона

271
26 октября 2017, 06:54

Приветствую!

Решил написать простую программку, которая бы рисовала многоугольник в зависимости от начальной точки, радиуса и количества углов, собственно сам метод, который формирует Point :

private void PolygonPoints()
{
    double angle = -Math.PI * 0.5;
    Points = new Point[Corners];
    for (int i=0; i< Corners; i++)
    {
        Points[i] = new Point 
        ( Xstrt + (int)Math.Round(Math.Cos(angle + Math.PI * 2.0 * i/ Corners) * Radius),
          Ystrt + (int)Math.Round(Math.Cos(angle + Math.PI * 2.0 * i/ Corners) * Radius));
    }
}

Однако получается, что все точки лежат на одной прямой. Подскажите, где ошибся ?

Answer 1

Ну, у тебя же даже в коде видно, что формулы для вычисления X и Y абсолютно идентичны и имеют линейную зависимость от i

Xstrt + (int)Math.Round(Math.Cos(angle + Math.PI * 2.0 * i/ Corners) * Radius)
Ystrt + (int)Math.Round(Math.Cos(angle + Math.PI * 2.0 * i/ Corners) * Radius)

Вот ты и получаешь прямую линию. Может, ты хотел использовать синус для одной из координат? А для того чтобы перевести целочисленный индекс в табличный, нужно хотя бы знать ширину этой таблицы.

int index = y * width + x;

Тогда:

int y = index / width;
int x = index % width;

В твоём случае Corners - это не ширина, а суммарное количество точек, поэтому ты опять же получишь прямую линию.

READ ALSO
Текст в коллекцию точек

Текст в коллекцию точек

Всем привет!

227
С# как преобразовать &ldquo;2 ч 46 мин&rdquo; в TimeSpan?

С# как преобразовать “2 ч 46 мин” в TimeSpan?

С# как преобразовывать подобные строковые значения string time1 = "2 ч 46 мин" и string time2 = "54 мин" в TimeSpan ?

263
Может ли IComparer&lt;type&gt; принимать обобщенный тип type?

Может ли IComparer<type> принимать обобщенный тип type?

Ребята мы должны использовать IComparer с типом точным? (не обобщенным) Или можем использовать и обобщенный?

205