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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
angryrobot
Командир зеленых роботов
346 / 283 / 53
Регистрация: 08.10.2013
Сообщений: 564
#1

Скруглить некоторые углы полигона - Программирование Android

10.07.2014, 10:59. Просмотров 1450. Ответов 10
Метки нет (Все метки)

Суть проблемы: Есть массив точек соединив которые друг с другом получим полигон. Углы полигона нужно скруглить по определённому радиусу. На выходе нужно получить экземпляр класса Path в котором будет содержаться этот самый полигон со скруглёнными углами. Загвоздка в том, что скруглять нужно не все углы, а только некоторые, а штатные средства не обладают такой гибкостью. Кто что посоветует ?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2014, 10:59     Скруглить некоторые углы полигона
Посмотрите здесь:

Закругленные углы - Программирование Android
Как с помощью xml закруглить? <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" ...

Закруглить углы у ImageView - Программирование Android
Здравствуйте! Подскажите как проще всего закруглить углы у ImageView?, лучше через xml, можно ли это сделать через Material Design, много...

Закруглить углы у MapFragment - Программирование Android
Всем привет, собственно вопрос в названии темы. Все что в гугле находил основано на фрейме, в который друг на друга накладываются карта и...

Glide, ImageView и скругленные углы - Программирование Android
Есть задачка: есть ImageView. Какие возможности имеются для того, чтобы скгладить углы? Была идея создать drawable ресурс, назначить...

Нужно у изображения обрезать углы по радиусу - Программирование Android
Где тут уже на форуме было, не могу найти. Короче на задний фон виджета рисуется картинка, но она прямоугольная. Нужно как то подрезать...

Узнать углы положения смартфона в пространстве - Программирование Android
Как можно узнать углы положения смартфона в пространчтве? Без гироскопа и магнитного датчика. Это реально? Акселерометр полагаю в этом не...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
krapotkin
2475 / 2352 / 596
Регистрация: 14.04.2014
Сообщений: 11,323
Записей в блоге: 1
10.07.2014, 20:22     Скруглить некоторые углы полигона #2
в path как должен выглядеть "скругленный" угол?
angryrobot
Командир зеленых роботов
346 / 283 / 53
Регистрация: 08.10.2013
Сообщений: 564
10.07.2014, 23:02  [ТС]     Скруглить некоторые углы полигона #3
Цитата Сообщение от krapotkin Посмотреть сообщение
в path как должен выглядеть "скругленный" угол?
Примерно как-то так (старался в paint'е как мог ):
Название: Безымянный.png
Просмотров: 107

Размер: 2.6 Кб
krapotkin
2475 / 2352 / 596
Регистрация: 14.04.2014
Сообщений: 11,323
Записей в блоге: 1
11.07.2014, 04:48     Скруглить некоторые углы полигона #4
вопрос в другом.
path - это набор рисовальных примитивов
отрезок, дуга, кривая безье
чем должны быть эти скругления?.
по идее, безье подходит
первая и последняя точка находятся на исх. линии, вторая и третья - в точке угла.

а надо там скруглять угол или нет - это вопрос исключительно как вы данные храните
храните набор точек плюс признак скругления, либо как на этом рисунке - первую и последнюю - не скруглять.
по этим данным рисуете path
angryrobot
Командир зеленых роботов
346 / 283 / 53
Регистрация: 08.10.2013
Сообщений: 564
11.07.2014, 08:03  [ТС]     Скруглить некоторые углы полигона #5
Цитата Сообщение от krapotkin Посмотреть сообщение
чем должны быть эти скругления?
Дугой или кривой Безье
Цитата Сообщение от krapotkin Посмотреть сообщение
первая и последняя точка находятся на исх. линии, вторая и третья - в точке угла.
Я тоже сначала думал что все так просто, но потом ужаснулся во что выгибается мой полигон при таком подходе (особенно когда две соседние вершины стоят рядом). Там есть какие-то геометрические тонкости которые мне неподвластны. И проблема именно в этом: Как зная координаты трех точек сгладить угол который образуют два отрезка которые через эти точки проходят ?
Название: Безымянный.png
Просмотров: 105

Размер: 5.3 Кб
krapotkin
2475 / 2352 / 596
Регистрация: 14.04.2014
Сообщений: 11,323
Записей в блоге: 1
11.07.2014, 10:51     Скруглить некоторые углы полигона #6
чтобы знать, как сгладить угол, нужно определить, что значит "сгладить угол"
вот картинка из вики. что не устраивает?
http://ru.wikipedia.org/wiki/Кривая_...zier_2_big.gif
angryrobot
Командир зеленых роботов
346 / 283 / 53
Регистрация: 08.10.2013
Сообщений: 564
11.07.2014, 12:07  [ТС]     Скруглить некоторые углы полигона #7
Цитата Сообщение от krapotkin Посмотреть сообщение
чтобы знать, как сгладить угол, нужно определить, что значит "сгладить угол"
Сложно точно передать словами, попробую объяснить на примере:
Мне нужно достичь такого же эффекта который получается когда для Paint'а вызывают метод:
Java
1
redPaint.setPathEffect(new CornerPathEffect(25));
При помощи этого я могу нарисовать Path со скруглёнными углами, это меня устраивает всем кроме одного - сглаживаются все углы, как я уже писал. На картинке ниже изображены два полигона: Синий это без всякого скругления, а красный это то что мне хочется получить.
Скруглить некоторые углы полигона
krapotkin
2475 / 2352 / 596
Регистрация: 14.04.2014
Сообщений: 11,323
Записей в блоге: 1
11.07.2014, 21:24     Скруглить некоторые углы полигона #8
я теряю нить. В чем проблема-то? Все исходные на руках. Рисование двумя процедурами либо ровно, либо криво.
У нас есть набор точек и набор знаний, в каких точках сглаживание, в каких - нет.
И то и другое - массивы

в цикле от 0 до N
Java
1
2
3
4
5
6
7
 {
if (IsCurve[i])
   path.cubicTo(.....);
else
  path.moveTo(x[i], y[i]);
}
canvas.drawPath(path, paint);
Кликните здесь для просмотра всего текста
http://developer.alexanderklimov.ru/android/catshop/android.graphics.path.php
angryrobot
Командир зеленых роботов
346 / 283 / 53
Регистрация: 08.10.2013
Сообщений: 564
11.07.2014, 22:34  [ТС]     Скруглить некоторые углы полигона #9
Цитата Сообщение от krapotkin Посмотреть сообщение
В чем проблема-то?
Если вам это не очень сложно, не могли бы вы написать кусок работающего кода ?
Конкретно мне не понятно что я должен передавать в качестве аргументов в метод cubicTo. Я много чего перепробовал уже, в том числе и рисовать скруглённые углы при помощи кривых безье, нужного эффекта не достиг, линия изгибается совсем не так как мне бы хотелось.
krapotkin
2475 / 2352 / 596
Регистрация: 14.04.2014
Сообщений: 11,323
Записей в блоге: 1
12.07.2014, 07:58     Скруглить некоторые углы полигона #10
Сообщение было отмечено автором темы, экспертом или модератором как ответ
кусок работающего кода я прислал, смотрите под плюсиком

как вы рисовали безье, если cubicTo - это оно и есть?
у кривой есть точка начала - это последняя точка из нарисованных в Path. если точек еще не было ставим туда moveTo.
далее в параметрах указываются координаты двух контрольных точек, в нашем случае они будут одинаковыми
и последние, 5-й и 6-й параметры - это точка окончания кривой
в вашем случае единственная проблема, что перед тем, как рисовать кривую, нужно определить ее точки начала и конца.
Координаты контрольных точек - это ваши исх координаты угла
у точки начала и окончания кривой нужно вычислить. Например как 1/10 от длины отрезка от угла до угла
тогда для отрезка MN (Xm, Ym)-(Xn, Yn) это точка P (Xp, Yp) где Xp=Xm+(Xn-Xm)*9/10, Yp=Ym+(Yn-Ym)*9/10
на отрезке NK будет точка Q - вместо 9/10 пишем 1/10
получим

moveTo M
lineTo P
cubicTo N,N,Q
lineTo K

и так для каждой пары отрезков MN NK
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.07.2014, 13:05     Скруглить некоторые углы полигона
Еще ссылки по теме:

Скруглить углы многоугольника (полигона) - C#
В общем есть задание построить многоугольник любой формы и закруглить его углы. Есть часть кода на построение многоугольника любой формы,...

Как скруглить углы у чекбокса - HTML, CSS
Подскажите как скруглить углы у чекбокса На каждый вопрос создавайте по одной теме! (Правила п.4.4)

Разделить изображение на части и скруглить углы - Photoshop
Приветсвую всех! Есть картинка, хочу получить каждую карту отдельно в png формате и с закругленными углами. Сделал раскройку картинки...

Скруглить улгы многоугольника - C#
На форме я ставлю точки и рисую по ним полигон, затем "обрезаю" углы, чтобы потом туда нарисовать дугу. И вроде бы все рассчитал, но все...


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

Или воспользуйтесь поиском по форуму:
angryrobot
Командир зеленых роботов
346 / 283 / 53
Регистрация: 08.10.2013
Сообщений: 564
12.07.2014, 13:05  [ТС]     Скруглить некоторые углы полигона #11
Цитата Сообщение от krapotkin Посмотреть сообщение
как вы рисовали безье, если cubicTo - это оно и есть?
У меня проблема была в том, что я пытался рисовать ВЕСЬ угол одной большой кривой безье (без двух прямых)
То что вы написали похоже работает:
Скруглить некоторые углы полигона
Большое спасибо, вы мне очень помогли
Yandex
Объявления
12.07.2014, 13:05     Скруглить некоторые углы полигона
Ответ Создать тему
Опции темы

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