Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
Мохаммед Али
131 / 69 / 5
Регистрация: 14.08.2009
Сообщений: 916
1

Нарисовать пересечение фигур кругов и линий

15.03.2010, 15:51. Показов 3628. Ответов 10
Метки нет (Все метки)

Нарисовать пересечение фигур кругов и линий в виде 1 фигуры, учитывая тчоки пересечения

Добавлено через 1 час 31 минуту
все что связано с созданием фигур и в астности нахождения стартового и конечного градуса дуги ато мой алгоритм не рабоатет что то
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 double[] List=new double[2];
            double dopugol1 = 0, dopugol2 = 0,alfa1,alfa2,alfa3,alfa4;
            alfa1 = Math.Atan(Math.Abs(y1 - y0r) / Math.Abs(x1 - x0r)) * (180 / Math.PI);
            alfa2 = Math.Atan(Math.Abs(x1 - x0r) / Math.Abs(y1 - y0r)) * (180 / Math.PI);
            alfa3 = Math.Atan(Math.Abs(y2 - y0r) / Math.Abs(x2 - x0r)) * (180 / Math.PI);
            alfa4 = Math.Atan(Math.Abs(x2 - x0r) / Math.Abs(y2 - y0r)) * (180 / Math.PI);
 
            if ((y1 >= y0r) && (x1 > x0r)) dopugol1=alfa1;
            if ((y1 > y0r) && (x1 <= x0r)) dopugol1 =alfa2+ 90;
            if ((y1 <= y0r) && (x1 < x0r)) dopugol1 =alfa1+ 180;
            if ((y1 < y0r) && (x1 >= x0r)) dopugol1 =alfa2+ 270;
 
            if ((y2 >= y0r) && (x2 > x0r)) dopugol2 = alfa3;
            if ((y2 > y0r) && (x2 <= x0r)) dopugol2 = alfa4+90;
            if ((y2 <= y0r) && (x2 < x0r)) dopugol2 = alfa3+180;
            if ((y2 < y0r) && (x2 >= x0r)) dopugol2 = alfa4+270;
здесьб под двум точкам дуги и центру ркпружности находиться дуга но чо то не находиться)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.03.2010, 15:51
Ответы с готовыми решениями:

Как нарисовать множество кругов или других фигур в SFML?
Имеется следующий класс: #include &lt;SFML/Graphics.hpp&gt; class Circle { private: ...

Пересечение кругов
Добрый вечер буду благодарен за помощь)) Смотрите нам даны два круга нам известно координаты их...

Пересечение кругов
Помогите с программой... В случайной последовательности x,x,...,xкаждая тройка чисел описы-вает...

Рисование линий, кругов и т.д.
В общем пишу что-то типа Паинта умею рисовать круги итд, но когда рисую круги, линии,...

10
869 / 658 / 214
Регистрация: 30.04.2009
Сообщений: 2,744
15.03.2010, 20:42 2
Точки пересечения найти можеш?

Цитата Сообщение от asd321 Посмотреть сообщение
в виде 1 фигуры
Какой фигури?
0
Мохаммед Али
131 / 69 / 5
Регистрация: 14.08.2009
Сообщений: 916
16.03.2010, 11:18  [ТС] 3
фигура выбираеться патом нужно найти на 1 этапе все точки пересечения, начальные и конечные углы дуг,патом результаты можно инвертировать или оставить оптимизированными, типа такого.
0
869 / 658 / 214
Регистрация: 30.04.2009
Сообщений: 2,744
16.03.2010, 19:07 4
Пересечение двух окружностей



C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
PointF[] CircleCrossPoints(double xc1,double  yc1,double  xc2,double  yc2,double  R1,double  R2)        
{             
double d = Math.Sqrt(Math.Pow(xc2 - xc1, 2) + Math.Pow(yc2 - yc1, 2));             
if (d > R1 + R2) return new PointF[0]; //нет пересечения                          
double a = (R1*R1 - R2*R2 + d*d ) / (2*d);            
double h = Math.Sqrt(R1*R1 - a*a);               
double xP = xc1 + a*(xc2 - xc1) / d;             
double yP = yc1 + a * (yc2 - yc1) / d;               
double xp1 = xP - h *( yc2 - yc1 ) / d;             
double yp1 = yP + h * ( xc2 - xc1 ) / d ;             
if (d == R1 + R2) return new PointF[1]{new PointF((float)xp1,(float)yp1)}; 
//прикосновение               
double xp2 = xP + h * (yc2 - yc1) / d;             
double yp2 = yP - h * (xc2 - xc1) / d;             
return new PointF[2]{new PointF((float)xp1,(float)yp1), new PointF((float)xp2,(float)yp2)};                      
}
Нахождение углов. Задается центр круга, радиус, две точки на окружности.


C#
1
2
3
4
5
6
7
double[] GetAngles(double xc, double yc, double R, PointF pOnCircle1, PointF pOnCircle2)         {             
double d = Math.Sqrt(Math.Pow(pOnCircle1.X-xc,2)+Math.Pow(pOnCircle1.Y-yc,2));             
double angle1 = Math.Acos((pOnCircle1.X-xc)/d);               
d = Math.Sqrt(Math.Pow(pOnCircle2.X - xc, 2) + Math.Pow(pOnCircle2.Y - yc, 2));             
double angle2 = Math.Acos((pOnCircle2.X - xc) / d);             
return new double[2] { angle1, angle2 };         
}

Добавлено через 18 минут
Пересечение прямой и окружности
http://e-maxx.ru/algo/circle_line_intersection
1
Мохаммед Али
131 / 69 / 5
Регистрация: 14.08.2009
Сообщений: 916
18.03.2010, 14:54  [ТС] 5
а что насчет алгоритмов каких-дибо которые формируют фигуры из множества линий и окружностей, знаю что 1 этап это нахождение всех точек пересечения и начальных-конечных углов дуг пересечения -(сделано), теперь 2 этап как сформировать узлы пересечения и выбрать дуги для формирования контура ведь при кажом пересеении окружности с 2 фигурами по боками его общая дуга разделяеться на 4 штуки которые формируют 6-8 вариантов прохождения контура фигуры через этот узел. хм как то так..

Добавлено через 1 час 24 минуты
как лучше всего все это сгруппировать или разбить, какие ест ьполезные алгоритмы, может какойто обход по вершинам или что нибудь похожее?
0
869 / 658 / 214
Регистрация: 30.04.2009
Сообщений: 2,744
18.03.2010, 15:58 6
Интерполяция подойдет?
0
Миниатюры
Нарисовать пересечение фигур кругов и линий  
Мохаммед Али
131 / 69 / 5
Регистрация: 14.08.2009
Сообщений: 916
19.03.2010, 13:36  [ТС] 7
чо это такое?), кажеться это кривая построенная по определенным точкам, кажеться она не подходит
0
869 / 658 / 214
Регистрация: 30.04.2009
Сообщений: 2,744
19.03.2010, 17:33 8
Функция, которая проходит через указанные точки.
Или нужно использовать "правильные" фигуры типа елипс или круг ?...
0
Мохаммед Али
131 / 69 / 5
Регистрация: 14.08.2009
Сообщений: 916
22.03.2010, 11:02  [ТС] 9
нужно использовать правильные элементы типа линия или дуга круга
0
Мохаммед Али
131 / 69 / 5
Регистрация: 14.08.2009
Сообщений: 916
23.03.2010, 13:50  [ТС] 10
http://xmages.net/upload/512a0734.bmp вот типа пример как должно выглядеть

Добавлено через 59 минут
ну ладна не нада вроде сам делаю как то
0
Мохаммед Али
131 / 69 / 5
Регистрация: 14.08.2009
Сообщений: 916
31.03.2010, 10:56  [ТС] 11
ну все сделал не знай кому нужно если чо спрашивайте)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.03.2010, 10:56

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Пересечение двух кругов
Привет. Есть входной файл такого формата: Первый ряд цифр относится к первому кругу, 1 -...

Пересечение двух кругов
Корифеи математики ,объясните, пожалуйста, как в подходе 2 были выведены все формулы. Они там даны...

Пересечение кругов «вручную»
С клавиатуры на двух строчках через пробел вводятся координаты центров и радиусы двух кругов. На...

Пересечение линий.
Здраствуйте, уважаемые форумчане. Прошу помощи в не легком курсовом проекте. Делаю триангуляцию...


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

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

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