0 / 0 / 0
Регистрация: 26.07.2011
Сообщений: 6
|
|
1 | |
Два отрезка26.07.2011, 18:59. Показов 9525. Ответов 15
Добрый вечер. Напишите пожалуйста код программы на Си(не С++).
Даны координаты двух отрезков х1,у1 и х2,у2, нужно найти точку пересечения этих отрезков. Как её решить я знаю, а вот как написать саму программу не знаю. Для нахождения пересечения надо составить два уравнения (x-x1)/(x2-x1)=(y-y1)/(y2-y1) и (x-x3)/(x4-x3)=(y-y3)/(y4-y3), потом найти х и у, так как прямые пересекаются, то у них есть общая точка пересечения с координатами (х,у), которую нам и надо найти. Еще надо проверить параллельность этих отрезков при помощи угловых коэффициентов: к1=(x2-x1)/(y2-y1); к2=(x4-x3)/(y4-y3); где k1 и k2 – тангенсы угла наклона отрезков к положительному направлению оси ОХ, если k1=k2, то отрезки параллельны, а значит, не имеют точек пересечения.
0
|
26.07.2011, 18:59 | |
Ответы с готовыми решениями:
15
Два отрезка Определить пересекаются ли два отрезка Написать функцию, определяющую пересекаются ли два отрезка Даны два отрезка действительной прямой. Определить, пересекаются ли они |
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
||||||
27.07.2011, 11:19 | 2 | |||||
Я так не сумею. Так что сделал, как смог
Ввод точек как-нибудь сам.
Возврат в строке 28 означает, что отрезки лежат на одной прямой, поэтому количество общих точек неизвестно. Их может быть 0, одна или бесконечное количество. Пожалуй там стоит вернуть особое значение, например -1. Тогда функция возвращает количество общих точек: 0, 1, не определено (-1). Поправил, вместе с ошибкой.
1
|
Заблокирован
|
|
27.07.2011, 12:49 | 3 |
У отрезков всегда координаты начала и конца, х1,у1 и х2,у2 - это координаты 2-х точек, может известны координаты начала скажем х1, у1 и конца х2,у2 для кадого отрезка???
Добавлено через 3 минуты По моему в консоли у сканф траблы с вводом дабл лучше float типы у всех переменных сделать...
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
27.07.2011, 12:56 | 4 |
0
|
Заблокирован
|
||||||
27.07.2011, 13:15 | 5 | |||||
Вот простенький код нахождения точки пересечения. Математика по вычислению углового коэффициента прямой и смещения есть в скриншоте по ссылке Окружность и прямая.
Программа не обрабатывает линии параллельные ОУ, предлагаю автору доделать эту часть самому.
1
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
27.07.2011, 13:33 | 6 |
Помимо этого программа находит пересечение прямых, а надо пересечение отрезков.
0
|
0 / 0 / 0
Регистрация: 26.07.2011
Сообщений: 6
|
|
27.07.2011, 13:53 [ТС] | 7 |
Да я не правильно написал, даны координаты 1 отрезка х1,у1 х2,у2 и 2-ого отрезка х3,у3 х4,у4
0
|
Заблокирован
|
|
27.07.2011, 14:28 | 8 |
Ну тогда используй программу, Два отрезка
или тебя смущает что для второй линии просит вводить х1, у1 - ну дык это и есть твое х3, у3 Добавлено через 3 минуты Ты прав, тогда нужно проверить принадлежность X диапазону [x1;x2] и [x3;x4]
0
|
0 / 0 / 0
Регистрация: 26.07.2011
Сообщений: 6
|
|
27.07.2011, 16:14 [ТС] | 9 |
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
27.07.2011, 16:18 | 10 |
Disok, моя-то функция чем не угодила?
0
|
easybudda
|
27.07.2011, 18:54
#11
|
0
|
0 / 0 / 0
Регистрация: 26.07.2011
Сообщений: 6
|
|
27.07.2011, 19:27 [ТС] | 12 |
не угадал) Или я не туда поставил функциия для ввода, потому что какие значения не ввожу получаю результат что-то типо -0,67.
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
27.07.2011, 19:38 | 13 |
Ну покажи что-ль куда поставил. Функцию main покажи.
0
|
0 / 0 / 0
Регистрация: 26.07.2011
Сообщений: 6
|
|
27.07.2011, 21:00 [ТС] | 14 |
Код
int main(void) { double x1,x2,x3,x4,y1,y2,y3,y4,xi,yi; printf("Vvedite koordinaty linii 1 \n"); printf("x1 = "); scanf("%g",&x1); printf("y1 = "); scanf("%g",&y1); printf("x2 = "); scanf("%g",&x2); printf("y2 = "); scanf("%g",&y2); printf("Vvedite koordinaty linii 2 \n"); printf("x3 = "); scanf("%g",&x3); printf("y3 = "); scanf("%g",&y3); printf("x4 = "); scanf("%g",&x4); printf("y4 = "); scanf("%g",&y4); switch (segment_intersection(x1, y1, x2, y2, x3, y3, x4, y4, &xi, &yi)) { case 1: printf("Intersection point: (%g, %g)\n", xi, yi); break; case 0: printf("Line segments has not intersection\n"); break; default: printf("Unknown\n"); } return 0; }
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
27.07.2011, 21:01 | 15 |
%g в scanf замените на %lf
1
|
0 / 0 / 0
Регистрация: 26.07.2011
Сообщений: 6
|
|
27.07.2011, 21:09 [ТС] | 16 |
Спасибо, всё работает.
0
|
27.07.2011, 21:09 | |
27.07.2011, 21:09 | |
Помогаю со студенческими работами здесь
16
Даны два отрезка действительной прямой. Определить, содержится ли один из них полностью в другом. Создать функцию, имеющую два аргумента и возвращающую в качестве аргумента число из отрезка [a,b] Разработать алгоритм и программу, определяющую длину отрезка и угол наклона отрезка к оси X (в градусах) Дан номер единицы длины и длина отрезка L в этих единицах. Вывести длину данного отрезка в метрах Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |