Re[2]: Замкнутые полилинии
От: DEMIAN_8  
Дата: 21.11.12 23:01
Оценка:
Здравствуйте, Centaur, Вы писали:

C>Здравствуйте, DEMIAN_8, Вы писали:


DEM>>Есть вектор, который хранит пары координат созданных фигур.

DEM>>Не могу понять, как посчитать угол наклона сторон, делаю следующее:
C>
DEM>>    double angle = 0;

DEM>>    for(int i = 1; i < number_of_points(); ++i)
DEM>>    {
DEM>>        angle = atan2(double(point(i).y-point(i-1).y),double(point(i).x-point(i-1).x));
DEM>>        a.push_back(angle);
DEM>>        angle = double();
DEM>>    }
   
DEM>>    angle = atan2(double(point(0).y-point(number_of_points()-1).y),double(point(0).x-point(number_of_points()-1).x)); // Подсчитываю угол последней "замыкающей" полилинии. 
DEM>>    a.push_back(angle);
C>


DEM>>В итоге получаются совершенно другие углы...


C>положительной полуосью Ox

Спасибо, теперь понятно, что углы верны.

Но все-равно в голове не укладывается, как с правильно с полученными углами работать.
Есть например фигура из коллекции точек:
1) [200;100]
2) [150;150]
3) [170;200]
4) [250;200]
5) [270;150]
6) [290;130]

Сначала думал вычислить углы, как в случае с окружность, но ничего из этого не вышло. Сейчас попробовал решить задачу с помощью определения наклона линии:


    for(int i = 1; i < number_of_points(); ++i)
    {
        double m = double(point(i).y-point(i-1).y)/double(point(i).x-point(i-1).x);
        a.push_back(m);
    }

    double m = double(point(0).y-point(number_of_points()-1).y)/double(point(0).x-point(number_of_points()-1).x); // Подсчитываю наклон последней "замыкающей" полилинии. 
    a.push_back(m);


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

for(int i=0, n=1; a[i]!=0; ++i, ++n)
    {
        double angle = a[i]; // Выбираю угол наклона для стороны
        if(angle < 0) angle*=-1;

        for(Point begin = point(n); begin.y-angle > point(n-1).y; angle+=5) // Выбираю последнюю точку полилинии до следующего угла
        {
            if(begin.x < point(n-1).x)
            {
                l.push_back(new Point(begin.x+angle, begin.y-angle)); // И иду назад до начальной точки полилинии, помещая точки для штриховки
            }
            else if(begin.x > point(n-1).x)
            {
                l.push_back(new Point(begin.x-angle, begin.y-angle));
            }
            else l.push_back(new Point(begin.x, begin.y-angle));
        }
                
    }


Ну и тоже самое, но только для правой стороны. Но получается следующий результат маркировки точек, чисто для проверки.
Не пойму, что я делаю не так...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.