Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
serjekat
0 / 0 / 0
Регистрация: 18.02.2016
Сообщений: 25
#1

Как можно нарисовать многоугольник - Программирование Android

15.11.2016, 13:15. Просмотров 585. Ответов 39
Метки нет (Все метки)

Доброе время суток.
Как можно нарисовать многоугольник на canvas, если есть размеры сторон углы в градусах и размеры диагоналей.
Какие есть идеи!?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.11.2016, 13:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как можно нарисовать многоугольник (Программирование Android):

нарисовать многоугольник - Программирование Android
Подскажите пожалуйста новичку! Как нарисовать многоугольник напрямую на canvas? Например 8 вершин: начинаем с точки(вершину) (А), потом...

Как нарисовать Bitmap на Canvas'е - Программирование Android
Здравствуйте, возникла проблема не могу поменять обычный фон WHITE на этот...

Как нарисовать анимированную линию - Программирование Android
Добрый день, форумчане. Есть интересная задача! Необходимо анимировано нарисовать стрелочку из одной точки к другой. Ясно, что...

Как нарисовать много треугольников в opengl? - Программирование Android
Исходник который использую http://developer.alexanderklimov.ru/android/opengles/intro.php у меня около тысячи треугольников,...

Как нарисовать красивую круговую диаграмму - Программирование Android
Пишу приложение, в котором нужно рисовать круговые диаграммы. Использую canvas и drawArc(). Но получается не красиво, слишком примитивно. В...

Хочу нарисовать многоугольник с некоторыми координатами углов. Как?! можно и не правильный - Pascal ABC
Хочу нарисовать многоугольник с некоторыми координатами углов. Как?! можно и неправильный

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
serjekat
0 / 0 / 0
Регистрация: 18.02.2016
Сообщений: 25
16.11.2016, 11:38  [ТС] #16
это диагонали и в тоже время треангуляция многоугольника (разбит многоугольник на треугольники)
vxg
Модератор
3158 / 1960 / 219
Регистрация: 13.01.2012
Сообщений: 7,504
16.11.2016, 11:42 #17
serjekat, лично для меня это так и осталось адовым кошмаром. если вы задаете диагонали я НЕ ПРЕДСТАВЛЯЮ как пользователь должен догадаться что из вершины D диагоналей не будет и что помешает ему ввести значение ЛЮБОЙ диагонали хоть на миллиметр отличное от того которое вы нарисовали на рисунке?
serjekat
0 / 0 / 0
Регистрация: 18.02.2016
Сообщений: 25
16.11.2016, 12:07  [ТС] #18
диагоналей можно вводить хоть сколько, триангуляция берет только нужные (остальные остаются не важные) размеры в см и конечно будет погрешность это тоже не важно. Эти все моменты учтены и уже реализованы, нужно именно метод что бы чертеж перерисовало в зависимости от размеров.

ExFau$t да Вы правильно говорите, но вот программно не получается сделать все рисует не в том направлении...
vxg
Модератор
3158 / 1960 / 219
Регистрация: 13.01.2012
Сообщений: 7,504
16.11.2016, 12:17 #19
serjekat, то что я напишу будет малоинформативно, но другие просто этого не скажут: алгоритм получения исходных данных и их использования из предоставленной информации непонятен. какие то диагонали отбрасываются? отлично. как система узнает какие из данных можно просто слить в унитаз? точность не критична? окай. давайте я введу диагональ BF равной 1 см - вы никогда не построите с такой диагональю и такими сторонами AF и FE фигуру существующую в нашем мире
serjekat
0 / 0 / 0
Регистрация: 18.02.2016
Сообщений: 25
16.11.2016, 12:39  [ТС] #20
не нужные диагонали отбрасываются после триангуляции, а диагонали проверяются на длину с помощью возможности существования треугольника к примеру треугольника AEF . если вводится не коректные данные то пользователь получает уведомлении о том что неправильные размеры и в этом случае перерисовка и не нужна.
vxg
Модератор
3158 / 1960 / 219
Регистрация: 13.01.2012
Сообщений: 7,504
16.11.2016, 12:49 #21
serjekat, как приложение поймет в какую из вершин вы ведете диагональ? из какой - я думаю за это отвечает ввод хотя уже ничему не удивлюсь если будет сказано что программа "догадывается" сама. а вот в какую из вершин... ?
serjekat
0 / 0 / 0
Регистрация: 18.02.2016
Сообщений: 25
16.11.2016, 13:34  [ТС] #22
у каждой вершины есть номер и имя, пользователь нажимает к примеру на угол A затем нажимает на угол C выводится диалоговое окно где пользователь вводит размер диагонали.
Проблема не в том как ввести данные, а в том как поменять координаты углов исходя из данных. Если это треугольник или прямоугольник все получается нормально а вот если углов больше то уже не получается. Есть размеры углы в цикле я могу изменить координаты всех углов, но не всегда правильно меняет... (считаем что пользователь вводит все правильные размеры)

Добавлено через 7 минут
Проблема я так понимаю в системе координат нужно наверное использовать Методы scale() , translate() ,rotate() и restore() вот это я как раз и не понимаю....
vxg
Модератор
3158 / 1960 / 219
Регистрация: 13.01.2012
Сообщений: 7,504
16.11.2016, 13:44 #23
serjekat, если бы пользователь задавал только ребра всегда можно было бы построить замкнутый несамопересекающейся даже выпуклый многоугольник. а вот эти "диагонали" которые на самом деле непойми что получается все портят)

Добавлено через 9 минут
serjekat, кажется я понял
давайте код которым вы рисуете
serjekat
0 / 0 / 0
Регистрация: 18.02.2016
Сообщений: 25
16.11.2016, 14:04  [ТС] #24
Java
1
2
3
4
5
6
7
8
9
for (int i=3;i<todoPoints.size()+1;i++){
    betta= (Math.pow(todoStoronas.get(i-3).getRazmer(),2)+Math.pow(todoStoronas.get(i-2).getRazmer(),2)-Math.pow(raz,2))/(2*todoStoronas.get(i-3).getRazmer()*todoStoronas.get(i-2).getRazmer());
    betta=Math.acos(betta);
    betta=Math.round((betta * 180) / Math.PI);
    float distance = (float)(cr/todoStoronas.get(0).getRazmer()*razmerAb);
 
    xxx = (float) (todoPoints.get(i-3).getX()+  (distance * Math.cos((betta))));
    yyy = (float) (todoPoints.get(i-3).getY() + (distance * Math.sin((betta))));
}
Добавлено через 4 минуты
distanse расcтояние на canvas от угла betta до следующего угла
todoStoronas.get(0).getRazmer() - размер на canvas первой стороны
razmerAb- размер введенный первой стороны
betta -угол между сторонами
cr-размер введенной диагонали

Добавлено через 47 секунд
todoPoints.size() - кол вершин многоугольника
ExFau$t
277 / 252 / 44
Регистрация: 08.05.2012
Сообщений: 1,363
16.11.2016, 14:56 #25
У тебя же есть набор треугольников, у которых две стороны - это стороны многоугольника, и одна сторона - "диагональ". Ты эти треугольники соединяешь через одну точку. То есть есть треугольник АБС и БДЕ, будет фигура АБСДЕ, где Б общая, угол между АБ и БД у тебя известен, значит поворот этого треугольника и положение в пространстве можно определить, вот так и рисуешь, пока последний треугольник не придёт в точку С. При этом не вижу ничего плохого в том, что стороны и диагонали могут пересекаться, когда, например, угол между стороной и диагональю больше, чем угол между этой же стороной и соседней. Диагонали можно сделать немного прозрачными для удобства.
vxg
Модератор
3158 / 1960 / 219
Регистрация: 13.01.2012
Сообщений: 7,504
16.11.2016, 15:12 #26
serjekat, нарисовал я это на бумаге и все там очень печально. не знаю как вы это в 10 строк засунули. видимо какую-то стратегию неведомую мне применяете. на бумаге у меня получается такой пример - есть
-вершина A
-расстояние до B
-расстояние до C
-расстояние до D
-диагональ AD
пытаемся строить ломаную ABCD. если AB + BC + CD < AD то очевидно что это ошибка ибо мы не дотянемся от A до D даже если выложим ребра в линию. этот случай мы не рассматриваем. тогда мы можем КАК УГОДНО вести ломаную. я принимал стратегию что ломаная при прохождении вершины загибается на один и тот же угол с таким расчетом что бы мы пришли в конечную точку. однако, если из вершин которые проходит ломаная выпущены другие диагонали, то как быть с их углами?

Добавлено через 2 минуты
...можно их не трогать и играть только с углами которые выходят за уже построенную часть но это ++доп условий
...а если у нас из одной из внутренних вершин проведена диагональ к другой внутренней вершине это вообще ппц
...а если в одной из вершин финишируют несколько диагоналей %)
serjekat
0 / 0 / 0
Регистрация: 18.02.2016
Сообщений: 25
16.11.2016, 15:47  [ТС] #27
код конечно больше. Диагонали изначально нужны что бы высчитать углы, после того как знаешь углы в градусах то диагонали не принципиальны. если к углу приходит несколько диагоналей к примеру 2 то это 3 треугольника и тогда угол будет сумма углов, так же с внутренними углами, расчеты углов в итоге координаты нужно определить зная углы и размеры сторон
vxg
Модератор
3158 / 1960 / 219
Регистрация: 13.01.2012
Сообщений: 7,504
16.11.2016, 15:52 #28
serjekat, мда.... *вкрадчиво* это, конечно, поздно спрашивать, но что у вас за задача такая странная?
ExFau$t
277 / 252 / 44
Регистрация: 08.05.2012
Сообщений: 1,363
16.11.2016, 16:19 #29
serjekat,
Цитата Сообщение от serjekat Посмотреть сообщение
Какие есть идеи!?
Я бы сделал так в первом приближении: нарисовал по дефолту равнобедренную фигуру с кол-во сторон, которые ввёл пользователь, затем пущай пользователь меняет по одному любой параметр, при этом будет легко проверить и не давать ему делать то, что геометрически невозможно. При введении им какого-то параметра, ну, скажем, увеличил он одну сторону, а углы (диагонали) оставил как есть, ты растягиваешь/перерисовываешь фигуру, но углы делаешь по своему усмотрению, не нарушая целостности фигуры. Тут вариантов на самом деле много, и все таки попроще, чем у тебя.
serjekat
0 / 0 / 0
Регистрация: 18.02.2016
Сообщений: 25
16.11.2016, 16:31  [ТС] #30
Задача не странная, по размерам сделать чертеж. Изначально пользователь динамически сам рисует чертеж, на глаз. А при введении размеров чертеж должен просо с масштабировать все стороны многоугольника.

Добавлено через 56 секунд
Задача именно что бы программа изменила размеры сторон на чертеже а не пользователь.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.11.2016, 16:31
Привет! Вот еще темы с ответами:

Как нарисовать многоугольник? - Pascal ABC
Хочу нарисовать многоугольник с некоторыми координатами углов. Как?!

.NET 4.x Как нарисовать многоугольник - C#
Не могу понять как нарисовать многоугольник. то есть я знаю что надо использовать Graphics я не могу понять как заполнить структуру PointF ?

Как нарисовать правильный многоугольник? - Visual C++
Добрый день. Вроде поню была функция отрисовки правильного многоугольника, но не могу найти (могу ошибаться). Конечно не проблема...

Как нарисовать многоугольник командой DrawPolygon()? - C#
Привет всем. Как мне нарисовать многоугольник в приложении ? Точки не должны задаваться заранее, а их кол-во и координаты(либо рандомно)...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
16.11.2016, 16:31
Ответ Создать тему
Опции темы

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