Здравствуйте, 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));
}
}
Ну и тоже самое, но только для правой стороны. Но получается следующий
результат маркировки точек, чисто для проверки.
Не пойму, что я делаю не так...