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

Точка в треугольнике - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Внешний файл http://www.cyberforum.ru/cpp-beginners/thread222426.html
есть программа нужно, чтобы она брала данные через внешний файл #include "stdafx.h" #include <conio.h> #include <stdio.h> #include <iostream> #include <math.h> #define size 15 using namespace std; void _tmain()
C++ Сортировка Нужна помощь с этой задачей: Дано произвольное целое положительное число K (K<10^9). Вывести цифры этого числа в порядке неубывания (например, 546085 =>045568). Процедуры и функции работы со строками не использовать. http://www.cyberforum.ru/cpp-beginners/thread222414.html
C++ Константные статические объекты класса.
Здравствуйте. Есть класс "матрица" нужно задать константные матрицы такие как E - единичная матрица и т.д., как это сделать? #include <iostream> #include <sstream> #include <string> #include <vector> #include <map> #include <set> #include <algorithm> #include <limits> #include <iomanip>
C++ Как массив разнозначных чисел превратить в массив цифр? (С++)
(Я делаю на Builder 6, С++ на консоли) У меня в курсаче есть такое задание: Для введённого целого числа N определить N-ую ЦИФРУ последовательности. Последовательность составляется так: Это ЧИСЛА Фибоначчи, Последующее = сумме двух предыдущих (F = F + F) Даны F = 0, F = 1. Т.е. дальше будет так: F = F + F = 1, F=1+1=2, F=2+1=3 и т.д. будут такие ЧИСЛА:...
C++ Определить, лежит ли точка с заданными координатами внутри треугольника http://www.cyberforum.ru/cpp-beginners/thread222380.html
Как с помощью этого решить это: Определите, лежит ли точка с координатами (x0, y0) внутри треугольника, вершины которого расположены в точках (x1, y1), (x2, y2) и (x3, y3). //=======================geometry.cpp #include <math.h> #include <fstream.h> #include <iostream.h> #include "geometry.h"
C++ Два вопроса по простой программе Вообщем начал изучать С++ (и из этого следует что я ничего не понимаю в программировании) В интернете скачал учебник "С++ для чайников" И там была показана первая программа: #include <stdio.h> #include <iostream.h> int main (int nNumberofArgs, char * psArgs ) { // Введите температуру в градусах цельсия int nNCelsius; cout << "Температура по цельсию: "; подробнее

Показать сообщение отдельно
yekka
384 / 148 / 8
Регистрация: 12.05.2011
Сообщений: 450
22.05.2011, 13:27     Точка в треугольнике
если у нас есть три вершины A, B, C, и нам надо проверить точку D на принадлежность к этому треугольнику, то делать надо так.
Допустим, возьмем точки A и B и проверим, лежит ли точка D по ту же сторону от прямой AB, что и С или нет. Если нет, то D не может принадлежать треугольнику. Аналогично проверяем по двум остальным парам вершин. Если все три проверки пройдены, то точка лежит внутри треугольника.

Какие тут площади могут быть?!

Добавлено через 14 часов 34 минуты
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
71
72
73
74
75
76
77
78
79
80
81
#include <iostream>
 
const int n = 3; //Число вершин в треугольнике
 
struct point {  //Точка и координаты.
  double x;
  double y;
};
 
class line {  //Прямая, заданная уравнением F(x,y)=ax+by+c
  double a;
  double b;
  double c;
public:
  line(void) {};
  line(const point &, const point &);
  double F(point A) const;  //Подставляет координаты точки А в уравнение 
                            //и возвращает результат
};
 
line::line(const point & A, const point & B) {
  a = B.y - A.y;
  b = A.x - B.x;
  c = -(a*A.x + b*A.y);
}
 
double line::F(point A) const {
  return (a*A.x + b*A.y + c);
}
 
int main(void) {
  using std::cin;
  using std::cout;
 
  point points[n]; //Массив из точек-вершин треугольника
  cout << "Введите координаты точек:\n";
  for (int i = 0; i < n; ++i) {
    cin >> points[i].x >> points[i].y;
  }
  
  line lines[n]; //Массив прямых-ребер треугольника
  //Ребра создаются по соседним точкам.
  //Но последнее ребро должно создаваться по первой и последней точкам
  for (int i = 0; i < (n-1); ++i) {
    lines[i] = line(points[i], points[i+1]);
  }
  lines[n-1] = line(points[n-1], points[0]);
 
  //Проверяем, не лежат ли точки на одной прямой.
  if (lines[0].F(points[n-1]) == 0) {
    cout << "Точки лежат на одной прямой\n";
    return 0;
  }
  
  cout << "Введите координаты точки:\n";
  point D; //Точка, чью принадлежность треугольнику будем проверять
  while (cin >> D.x && cin >> D.y) {
    bool flag = false; //true - точка лежит вне треугольника и false - если нет
 
    //Проверяем, лежат ли точки C и D по одну сторону от прямой AB
    //В этом случае произведение должно быть положительным
    //или 0 - если D лежит на прямой AB
    if (lines[0].F(D)*lines[0].F(points[n-1]) < 0) {
      flag = true;
    }
    for (int i = 1; i < n; ++i) {
      if (lines[i].F(D)*lines[i].F(points[i-1]) < 0) 
    flag = true;
    }
 
    if (flag) {
      cout << "Точка лежит за пределами треугольника\n";
    } else {
      cout << "Точка лежит внутри треугольника\n";
    }
    
    cout << "Введите координаты точки:\n";
  }
 
  return 0;
}
При этом в коде нет ни одного деления и ни одного извлечения корня, что избавляет от проблем с округлением
 
Текущее время: 03:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru