Аватар для SaynorPRO
11 / 11 / 5
Регистрация: 05.10.2016
Сообщений: 122

Пересекаются ли прямые, и, если да, то найти координаты точки пересечения

07.05.2017, 22:13. Показов 10068. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ввод состоит из координат точек прямых (две точки - первая прямая, ещё две - вторая прямая).

Так как это прямые, то ситуаций может быть три:
1. Прямые совпадают
2. Прямые параллельны
3. Прямые пересекаются
С первой ситуацией вопросов нет, а вот со второй и третьей проблемы. Я решил взять за признак пересечения прямых разность угловых коэффициентов. Чтобы его вычислить, нужно из уравнения прямой (Ax + By + C) поделить коэффициент A на B. Единственное "но" в этом случае - это когда B = 0. Я отработал это как частный случай. Всем известно, что если B = 0, то прямая будет параллельна оси Y, а это, в свою очередь, значит, что если только одна из прямых параллельна оси Y, то прямые пересекаются, а если у обеих B = 0, то они параллельны. Проблема состоит в том, что тестировочная система не принимает задачу на 100%, а я никак не могу придумать тест, на котором программа не пойдёт.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <iostream>
#include <iomanip>
#include <cmath>
 
using namespace std;
 
double x, y;
long long x1, y_1, x2, y2, x3, y3, x4, y4;
long long A1, B1, C1, A2, B2, C2;
 
void calcCoef () {
  A1 = y2 - y_1;
  B1 = x1 - x2;
  C1 = x1 * (y_1 - y2) + y_1 * (x2 - x1);
 
  A2 = y4 - y3;
  B2 = x3 - x4;
  C2 = x3 * (y3 - y4) + y3 * (x4 - x3);
}
 
void calcPoint () {
  x = (double)(B1 * C2 - B2 * C1) / (double)(B2 * A1 - B1 * A2);
  y = (double)(A1 * C2 - A2 * C1) / (double)(A2 * B1 - A1 * B2);
  cout << x << ' ' << y << endl;
}
 
void solve () {
  calcCoef();
  long long p1 = x3 * (y2 - y_1) + y3 * (x1 - x2) + x1 * (y_1 - y2) + y_1 * (x2 - x1); 
  long long p2 = x4 * (y2 - y_1) + y4 * (x1 - x2) + x1 * (y_1 - y2) + y_1 * (x2 - x1);
  long long p3 = x1 * (y4 - y3) + y_1 * (x3 - x4) + x3 * (y3 - y4) + y3 * (x4 - x3);
  long long p4 = x2 * (y4 - y3) + y2 * (x3 - x4) + x3 * (y3 - y4) + y3 * (x4 - x3);
  if (p1 == 0 && p2 == 0 && p3 == 0 && p4 == 0) { //Проверка на то, что прямые совпадают
    cout << 2 << endl;
    return;
  }
 
  if (!B1 || !B2) { //То, о чём я писал
    if (!B1 && !B2) {
      cout << 0 << endl;
      return;
    } else {
      cout << 1 << ' ';
      calcPoint();
      return;
    }
  }
 
  if ((double)(A1 / B1) != (double)(A2 / B2)) {
    cout << 1 << ' ';
    calcPoint();
  } else {
    cout << 0 << endl;
  }
  /*
  Поясняю вывод
  0 - прямые параллельны (не пересекаются)
  1 - прямые пересекаются, далее идут координаты
  2 - прямые совпадают
  */
}
 
 
 
int main () {
  cout << scientific;
  cin >> x1 >> y_1 >> x2 >> y2 >> x3 >> y3 >> x4 >> y4;
  solve();
  return 0;
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.05.2017, 22:13
Ответы с готовыми решениями:

Доказать, что прямые пересекаются и найти координаты точки пересечения
Доказать, что прямые L_1: \frac {x-1} {2} = \frac {y+2} {-1} = \frac {z} {-2} и L_2: \frac {x+1} {1} = \frac {y+11} {2} = \frac {z+6} {1}...

Указать, совпадают прямые, параллельны или пересекаются, если пересекаются, то найти точку пересечения
Указать, совпадают прямые, параллельны или пересекаются, если пересекаются, то найти точку пересечения 2х-5у-5=0 и х=1+t, у=-9-t

Две прямые описываются уравнениями напечатать координаты точки пересечения этих прямых, либо сообщить что эти прямые совпада
Две прямые описываются уравнениями а1x+b1y+c1=0 a2x+b2y+c2=0 напечатать координаты точки пересечения этих прямых, либо сообщить что...

5
21 / 21 / 10
Регистрация: 11.09.2015
Сообщений: 103
07.05.2017, 23:04
SaynorPRO, когда-то точку пересечения 2-х прямых или её отсутствие определяли решением системы 2-х линейных уравнений.

Добавлено через 10 минут
Прямые A1x + B1y + C1 = 0; A2x + B2y + C2 = 0; параллельны, если A2/A1 = B2/B1.
0
 Аватар для SaynorPRO
11 / 11 / 5
Регистрация: 05.10.2016
Сообщений: 122
08.05.2017, 09:23  [ТС]
Kudryashov_R_D, впервые такое вижу. Я же написал, что определяю параллельность прямых через угловой коэффициент (A1 / B1)
0
1718 / 567 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
08.05.2017, 10:42
Лучший ответ Сообщение было отмечено SaynorPRO как решение

Решение

http://www.matematicus.ru/publ... h/11-1-0-3

Замечание 3.
1
 Аватар для SaynorPRO
11 / 11 / 5
Регистрация: 05.10.2016
Сообщений: 122
08.05.2017, 21:35  [ТС]
мановар, Решение пошло, спасибо. А почему идея с коэффициентами оказалась нерабочей?
0
1718 / 567 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
09.05.2017, 04:59
SaynorPRO, надо в программе разбираться, но зачем, если есть путь короче.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.05.2017, 04:59
Помогаю со студенческими работами здесь

При каком значении прямые пересекаются? Найти точку пересечения
Здравствуйте! Помогите решить задачу

Определить, пересекаются ли параболы y = ax2+bx+c и y = dx2+mx+n. Если пересекаются, то найти точку пересечения
Определить, пересекаются ли параболы y = ax2+bx+c и y = dx2+mx+n. Если пересекаются, то найти точку пересечения

Найти параметр a, где прямые пересекаются и найти точку их пересечения
Заданы 2 прямые в параметрической форме: L1:= (-1,1,-2)+t(2,1,3) L2:= (0,0,2)+p(a,2,a) a)найти параметр a , где прямые...

Если прямые попарно пересекаются и образуют треугольник, то найти его площадь
три прямые на плоскости заданы уравнениями акх+bky=ck (к=1,2,3) если прямые попарно пересекаются и образуют треугольник, то найти его...

Если прямые пересекаются и образуют треугольник, тогда найти его площадь
Три прямые заданы на плоскости уравнениями Ax+By=C.Если эти прямые пересекаются и образуют треугольник,тогда найти его площадь.(Решить...


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

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

Новые блоги и статьи
Мастер-класс по микросервисам на Node.js
Reangularity 21.06.2025
Node. js стал одной из самых популярных платформ для микросервисной архитектуры не случайно. Его неблокирующая однопоточная модель и событийно-ориентированный подход делают его идеальным для. . .
Управление Arduino из WPF приложения
Wired 21.06.2025
Зачем вообще связывать Arduino с WPF-приложением? Казалось бы, у Arduino есть собственная среда разработки, своя экосистема, свои способы управления. Однако при создании серьезных проектов. . .
Звёздная пыль
kumehtar 20.06.2025
Я просто это себе представляю: как создавался этот мир. Как энергия слипалась в маленькие частички. Как они собирались в первые звёзды, как во вселенной впервые появился Свет. Как эти звёзды. . .
Создание нейросети с PyTorch
AI_Generated 19.06.2025
Ключевое преимущество PyTorch — его питоновская натура. В отличие от TensorFlow, который изначально был построен как статический вычислительный граф, PyTorch предлагает динамический подход. Это. . .
JWT аутентификация в ASP.NET Core
UnmanagedCoder 18.06.2025
Разрабатывая веб-приложения, я постоянно сталкиваюсь с дилеммой: как обеспечить надежную аутентификацию пользователей без ущерба для производительности и масштабируемости? Классические подходы на. . .
Краткий курс по С#
aaLeXAA 18.06.2025
Здесь вы найдете все необходимые функции чтоб написать програму на C# Задание 1: КЛАСС FORM 1 public partial class Form1 : Form { Spisok listin = new Spisok(); . . .
50 самых полезных примеров кода Python для частых задач
py-thonny 17.06.2025
Эффективность работы разработчика часто измеряется не количеством написаных строк, а скоростью решения задач. Готовые сниппеты значительно ускоряют разработку, помогают избежать типичных ошибок и. . .
C# и продвинутые приемы работы с БД
stackOverflow 17.06.2025
Каждый . NET разработчик рано или поздно сталкивается с ситуацией, когда привычные методы работы с базами данных превращаются в источник бессонных ночей. Я сам неоднократно попадал в такие ситуации,. . .
Angular: Вопросы и ответы на собеседовании
Reangularity 15.06.2025
Готовишься к техническому интервью по Angular? Я собрал самые распространенные вопросы, с которыми сталкиваются разработчики на собеседованиях в этом году. От базовых концепций до продвинутых. . .
Архитектура Onion в ASP.NET Core MVC
stackOverflow 15.06.2025
Что такое эта "луковая" архитектура? Термин предложил Джеффри Палермо (Jeffrey Palermo) в 2008 году, и с тех пор подход только набирал обороты. Суть проста - представьте себе лук с его. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru