Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
WarpDrive
Заблокирован
1

Offset контура в 2D

30.10.2016, 20:14. Просмотров 1003. Ответов 8
Метки нет (Все метки)

Привет!
Есть контур из отрезков, отрезок образован двумя точками. У точек могут быть любые свойства, пока ещё не придумал, какие нужны, например type [end point, corner point, middle] и т.д.
Есть ли готовые какой - то алгоритм или способ, что бы этот контур проофсетить в обе стороны и обрезать лишнее в 2D?
0
Миниатюры
Offset контура в 2D   Offset контура в 2D  
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.10.2016, 20:14
Ответы с готовыми решениями:

offset c++
Помогите разобраться с оффсетами,мне нужна какая нибудь документация,может быть книги...хотя бы...

Построение OFFSET полилинии
Как малой кровью построить сдвинутую поли линию (offset) от базовой линии в заданном направление...

Offset и offsethigh в WriteFile
Асинхронный вывод. BOOL WINAPI WriteFile( _In_ HANDLE hFile, _In_ ...

Vector iterator + offset out of range
Вылазит такая ошибка. Подскажите, из-за чего она может вылезти?

Почему параметр offset в fseek не перемещает указатель?
Есть код # include <stdio.h> # include <fcntl.h> # include <io.h> #pragma warning(disable :...

8
rikimaru2013
2515 / 1177 / 355
Регистрация: 30.11.2013
Сообщений: 3,790
30.10.2016, 20:38 2
C++
1
2
DrawWithScale( 1.2 );
DrawWithScale( 0.8 );
Вот хороший вариант)
0
castaway
Эксперт С++
4945 / 3051 / 455
Регистрация: 10.11.2010
Сообщений: 11,146
Записей в блоге: 10
Завершенные тесты: 1
30.10.2016, 20:39 3
Clipper.
2
WarpDrive
Заблокирован
30.10.2016, 20:43  [ТС] 4
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Вот хороший вариант)
Так мне это как бы не нарисовать надо, а поиметь координаты точек оффсетнутого контура....
Цитата Сообщение от castaway Посмотреть сообщение
Clipper.
Слушай, а не помнишь, как там функция этого оффсета называется, что бы мне в сорцах реализацию подсмотреть? :-)
0
30.10.2016, 20:43
castaway
Эксперт С++
4945 / 3051 / 455
Регистрация: 10.11.2010
Сообщений: 11,146
Записей в блоге: 10
Завершенные тесты: 1
30.10.2016, 21:20 5
Лучший ответ Сообщение было отмечено WarpDrive как решение

Решение

Цитата Сообщение от WarpDrive Посмотреть сообщение
Слушай, а не помнишь, как там функция этого оффсета называется, что бы мне в сорцах реализацию подсмотреть? :-)
Этим занимается класс ClipperOffset.
1
WarpDrive
Заблокирован
30.10.2016, 22:29  [ТС] 6
Цитата Сообщение от castaway Посмотреть сообщение
Этим занимается класс ClipperOffset.
Огромное спасибо! То, что надо!

Добавлено через 27 минут
castaway, слушай, я что - то не пойму, а этот Clipper может c double-ами работать?
Вот я взял пример:
C++
1
2
3
4
5
6
7
8
9
Path subj;
    Paths solution;
    subj <<
    IntPoint(348,257) << IntPoint(364,148) << IntPoint(362,148) <<
    IntPoint(326,241) << IntPoint(295,219) << IntPoint(258,88) <<
    IntPoint(440,129) << IntPoint(370,196) << IntPoint(372,275);
    ClipperOffset co;
    co.AddPath(subj, jtMiter, etClosedPolygon);
    co.Execute(solution, -7.0);
Всё, вроде собралось, дальше, во всех примерах идёт DrawPolygons, но он мне не нужен, мне нужен список вертексов и крайней необходимо работать с float-ам или даблами...
Как получить список векртексов результата?

Добавлено через 3 минуты
Точнее я вижу, как там объявлен Path:
C++
1
 typedef std::vector< IntPoint > Path;
А для double я ничего такого не нашёл, хотя сам тайпдеф там есть такой:
C++
1
2
3
4
5
6
7
struct DoublePoint
{
  double X;
  double Y;
  DoublePoint(double x = 0, double y = 0) : X(x), Y(y) {}
  DoublePoint(IntPoint ip) : X((double)ip.X), Y((double)ip.Y) {}
};
0
castaway
Эксперт С++
4945 / 3051 / 455
Регистрация: 10.11.2010
Сообщений: 11,146
Записей в блоге: 10
Завершенные тесты: 1
30.10.2016, 22:42 7
Цитата Сообщение от WarpDrive Посмотреть сообщение
а этот Clipper может c double-ами работать?
Напрямую - нет.
Тут поможет преобразование в Fixed Point и обратно.
1
WarpDrive
Заблокирован
30.10.2016, 22:57  [ТС] 8
Цитата Сообщение от castaway Посмотреть сообщение
Тут поможет преобразование в Fixed Point и обратно.
Это в смысле float-ы умножить, ну так на 1 000 000 и потом разделить?
Ок, но я вот - то не пойму, а как оффсетнуть отрезок из 2-х точек? Что - то эта штука требует для работы сразу тонну точек...
0
castaway
Эксперт С++
4945 / 3051 / 455
Регистрация: 10.11.2010
Сообщений: 11,146
Записей в блоге: 10
Завершенные тесты: 1
31.10.2016, 07:39 9
Цитата Сообщение от WarpDrive Посмотреть сообщение
Это в смысле float-ы умножить, ну так на 1 000 000 и потом разделить?
Да. Только миллион это много. Тут и сотни хватит.

Цитата Сообщение от WarpDrive Посмотреть сообщение
Ок, но я вот - то не пойму, а как оффсетнуть отрезок из 2-х точек? Что - то эта штука требует для работы сразу тонну точек...
Для поддержки работы с отрезками нужно определить макрос use_lines.
Но в вашем случае, как мне кажется, лучше работать с линиями как с полигоном, при чём задать всего один полигон - внешний контур, и 6 дыр (на вашем изображении справа), а затем выполнить offset.
В общем надо пробовать, эксперементировать...
1
31.10.2016, 07:39
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.10.2016, 07:39

Построение контура в графе
Здравствуйте, имею задание: Граф представил в виде матрицы смежности, нужна помощь в...

Математическое моделирование идеального контура. Определить фазовую траекторию контура
построить модель идеального контура. определить фазовую траекторию контура для q(0)=10^-5 K,...

Offset dest и offset sourse
Всем привет. Объясните пожалуйста что значит offset dest и offset sourse Вот такая строка есть, не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.