Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 20.10.2015, 09:32   #1
ababagalamaga
 
Регистрация: 20.10.2015
Сообщений: 3
По умолчанию Отображение дуги внутри прямоугольника в зависимости от расстояния между границами

Здравствуйте,
Есть задача, не могли бы подтолкнуть к решению -- в какую сторону мыслить?
Имеем прямоугольник, координаты нижнего левого угла -- (0, 0), правого верхнего (ширина прямоугольника, высота прямоугольника). Внутри этого прямоугольника есть точка с определёнными координатами. Нужно нарисовать вокруг этой точки такой сегмент окружности с определённой длиной дуги. Вычислить внутренний угол сегмента и радиус окружности.
Сейчас проиллюстрирую:


Вот так. Как видно из рисунка, если сегмент на помещается в данной части экрана (к примеру слева внизу), то нужно найти такой радиус, чтобы он удовлетворял нашу длину дуги.
Подскажите, в какую сторону копать?
Заранее спасибо.

Последний раз редактировалось ababagalamaga; 20.10.2015 в 12:18.
ababagalamaga вне форума
Старый 20.10.2015, 11:59   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Вот так. Как видно из рисунка,
из приложенного рисунка ничего не видно.

Цитата:
Подскажите, в какую сторону копать?
всегда надо начинать с НАПИСАНИЯ АЛГОРИТМА.

например такого
Код:
1. определить требования к идеальной дуге (считаем что границы прямоугольника бесконечно удалены от искомой точки)
2. я могу построить такую идеальную дугу в НАСТОЯЩЕМ прямоугольнике. ЗАКОНЧИТЬ работу.
3. изменить требования к идеальной дуге ("приблизить" одну из сторон прямоугольника)
4. перейти к п.2
после этого расширить СВОЙ алгоритм до НАПИСАНИЯ программы.

P.S. данный алгоритм является ИСКЛЮЧИТЕЛЬНО примерным и посему является НЕВЕРНЫМ(в нем есть НЕДОРАБОТКИ).
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 20.10.2015 в 12:07.
evg_m вне форума
Старый 20.10.2015, 12:34   #3
ababagalamaga
 
Регистрация: 20.10.2015
Сообщений: 3
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
из приложенного рисунка ничего не видно.


всегда надо начинать с НАПИСАНИЯ АЛГОРИТМА.

например такого
Код:
1. определить требования к идеальной дуге (считаем что границы прямоугольника бесконечно удалены от искомой точки)
2. я могу построить такую идеальную дугу в НАСТОЯЩЕМ прямоугольнике. ЗАКОНЧИТЬ работу.
3. изменить требования к идеальной дуге ("приблизить" одну из сторон прямоугольника)
4. перейти к п.2
после этого расширить СВОЙ алгоритм до НАПИСАНИЯ программы.

P.S. данный алгоритм является ИСКЛЮЧИТЕЛЬНО примерным и посему является НЕВЕРНЫМ(в нем есть НЕДОРАБОТКИ).
Спасибо за совет, кое-какой алгоритм есть и это мой косяк, что не предоставил его в сообщении выше.
Алгоритм примерно такой:
1. Проверяем, можно ли описать окружность с радиусом по умолчанию вокруг данной точки.
2. Если да, то описываем, заканчиваем работу. Если нет, то переходим к пункту 3.
3. Проверяем по оси Х: можно ли описать окружность. Если нет, то ищем начальный угол сегмента для отрисовки, внутренний угол сегмента, вычисляем на основании угла радиус.
4. Проверяем по оси У: можно ли описать окружность. Если нет, то ищем начальный угол сегмента для отрисовки, внутренний угол сегмента. Если в пункте 3 не удалось описать окружность, то находим пересечение углов из 3 и 4 пунктов. Вычисляем на основании угла радиус.
5. Если удалось описать окружность в третьем пункте и не удалось в 4, то повторяем четвёртый пункт, но только с осью Х.
6. Имеем начальный угол для отрисовки, внутренний угол сегмента, радиус окружности. Рисуем сегмент.

Только проблема в том, что радиус напрямую зависит от угла, который в свою очередь зависит от радиуса. Если мы не может описать окружность ни по оси Х, ни по У, то выливаются некоторые погрешности из-за того, которые решаются множеством итерация, в которых вычисляются внутренний угол и радиус. Только это уже не алгоритм, а говно. То, что я написал выше -- тоже попахивает, да только итерации это совсем уж не решение проблемы. Именно поэтому я пришёл сюда спросить: куда копать в данном случае?

Последний раз редактировалось ababagalamaga; 20.10.2015 в 12:36.
ababagalamaga вне форума
Старый 21.10.2015, 11:30   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

0. имеется идеальная дуга. (заданная размерами радиус + угол и направлением )
1. Она может поместиться в прямоугольник или же нет.
2. если поместилась, то все хорошо.
3. если не поместилась, то ее можно как-то поворачивать.(менять направление)
4. если после какого-то поворота, она поместилась то все опять таки хорошо.
5. если не поместилась (такое может быть в углу), то ее придется сжать(уменьшить её угол и увеличив радиус)

КАК узнать ее новые габариты?
она(новая дуга) в углу и ее концы упираются В две угловые стороны прямоугольника.
что нам известно
l требуемая длина дуги
a1, a2 расстояния от центра дуги до двух интересующих нас сторон
Цитата:
и ее концы упираются
радиус является гипотенузой в треугольнике, а прилежащим катетом перпендикуляр из центра к стороне(то самое расстояние)
прилежащие углы дополняют угол дуги до 3/4 полного(2pi)
итого есть система
2.JPG
внимание! ai =rai читать как ai =r*cos(ai) второе и третье уравнения.
решаем и получаем новые ПАРАМЕТРЫ дуги.

6. НО может и так случиться (при очень узком прямоугольнике) что мы не сможем увеличить радиус.
в этом случае надо наоборот увеличить угол, чтобы уменьшить радиус.
причем в этом случае нам известен новый максимальный радиус (это расстояние до какой-то стены).
вычисляем новые ПАРАМЕТРЫ дуги.

7.если нам до сих пор не удалось, ТО видимо уже ничего не поделаешь.

P.S. (такое) является дополнительным условием к если.
если ... и (такое), то
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 21.10.2015 в 11:35.
evg_m вне форума
Старый 19.11.2015, 00:33   #5
ababagalamaga
 
Регистрация: 20.10.2015
Сообщений: 3
По умолчанию

Огромное спасибо за помощь, без Вас бы не справился.
Тему можно закрывать
ababagalamaga вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
stringgrid (delphi) - найти цену билета в зависимости от расстояния Падаван Помощь студентам 3 05.12.2013 11:49
Поиск расстояния между двумя точками owl1n C# (си шарп) 8 02.11.2013 12:47
Формула расстояния между координатами DarkPower Общие вопросы C/C++ 2 12.09.2012 21:14
Задача в Exel (стоимость билета в зависимости от расстояния) Phill Помощь студентам 9 30.11.2010 00:20
кратчайшие расстояния между вершинами pum-pum-pum Помощь студентам 1 07.01.2010 11:30