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

Нахождение площади через координаты треугольника - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Абстрактный класс чисел http://www.cyberforum.ru/cpp-beginners/thread336728.html
Нужно создать абстрактный класс чисел с виртуальными методами - арифметическими операциями. У этого класса 2 наследника - комплексные числа и дроби. Я написал решение этой задачи, но оно мне кажется. Скажите, есть ли другие способы и как можно было сделать это лучше. Вот мой код: #include <iostream> #include <string> #include <math.h> const double EPS = 1e-4;
C++ Рекурсия в различных компиляторах Доброго времени суток. Задача: дано целое число n, нужно получить его битовое представление, развернуть его, и то, что получилось перевести обратно в десятичную систему счисления. Пример:n = 4, ответ - 1 n = 6, ответ - 3. Решил ее через циклы, прошла все тесты, поэтому решение меня не интересует. Также написал красивую на мой взгляд рекурсию, которая отлично работает на gcc. #include... http://www.cyberforum.ru/cpp-beginners/thread336725.html
C++ Ввод данных
В общем есть переменная int year; Юзер должен ввести значение переменной, но мне нужно чтобы он мог ввести максимум четырехзначное число, тоесть как бы ограничить количество вводимых символов
Графы C++
Прочитал про обход графа в глубину, посмотрел реализацию, и тут вопрос а как можно использовать этот обход в глубину?
C++ Матрица Изменение http://www.cyberforum.ru/cpp-beginners/thread336665.html
Здравствуйте! Просьба такая: "Приведите пожалуйста пример как можно расширять границы матрицы". Например из матрицы 3х3 сделать матрицу 3х4 и новый столбец добавленный сразуже обнулить. Я думаю что с помощью replace но опять такие нужен пример с хорошими пояснениями.
C++ взять адрес переменной если & стоит перед переменной, то это читается как - " взять адрес этой переменной" а если он стоит после ? подробнее

Показать сообщение отдельно
hepr
 Аватар для hepr
60 / 32 / 5
Регистрация: 21.10.2010
Сообщений: 538
28.07.2011, 00:07     Нахождение площади через координаты треугольника
Здравствуйте, есть задание

Напишите функцию square, вычисляющую площадь треугольника. С ее помощью для каждой из N точек определите, принадлежит ли точка заданному треугольнику.


Входные данные
Первая строка входного файла содержит координаты трех вершин треугольника x1, y1, x2, y2, x3, y3. Во второй строке записано натуральное число N. Далее в каждой из следующих N строк содержатся координаты точки, которую необходимо проверить на принадлежность треугольнику. Все числа во входном файле целые, по модулю не превосходящие 100.


Выходные данные
Для каждой из N точек на отдельной строке выведите слово YES, если точка принадлежит треугольнику или лежит на его границе, и слово NO - в противном случае.


Пример(ы)
input.txt
0 0 0 2 2 0
3
0 0
1 1
2 2

Пока остановимся чисто на нахождении площади
Я сделал программу
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
#include "stdafx.h"
#include "iostream"
#include "math.h"
#include "vector"
#include "string"
 
#define PI 3.14159265
 
using namespace std;
struct point{
    int x;
    int y;
};
int _tmain(int argc, _TCHAR* argv[])
{
    vector<point> points;
    int x1,x2,x3,y1,y2,y3;
    FILE * file = fopen("input.txt","rt");
    fscanf(file, "%d", &x1);
    fscanf(file, "%d", &y1);
    fscanf(file, "%d", &x2);
    fscanf(file, "%d", &y2);
    fscanf(file, "%d", &x3);
    fscanf(file, "%d", &y3);
    int n;
    fscanf(file, "%d", &n);
    for(int a=0;a<n;a++)
    {
        point p;
        fscanf(file, "%d", &p.x);
        fscanf(file, "%d", &p.y);
        points.push_back(p);
    }
 
    cout << x1 << " " << y1 << endl;
    cout << x2 << " " << y2 << endl;
    cout << x3 << " " << y3 << endl;
 
    double wall1, wall2, wall3;
 
    wall1 = sqrt(pow(static_cast<double>(x1-x2),2.0)+pow(static_cast<double>(y1-y2),2.0));
    wall2 = sqrt(pow(static_cast<double>(x2-x3),2.0)+pow(static_cast<double>(y2-y3),2.0));
    wall3 = sqrt(pow(static_cast<double>(x1-x3),2.0)+pow(static_cast<double>(y1-y3),2.0));
 
    cout << "Walls: " <<  wall1 << " " << wall2 << " " << wall3 << endl;
    cout << "Pows: " << pow(wall1,2.0) << " " << pow(wall2,2.0) << " " << pow(wall3,2.0) << endl;
 
    double cos = (pow(wall2,2.0)-pow(wall1,2.0)-pow(wall3,2.0))/(2*wall2*wall3);
    cout << cos << endl;
    double ugol = acos(cos);
    cout << ugol << endl;
 
    double plosad = 0.5 * wall1 * wall2 * sin(ugol);
    cout << "pl= " << plosad << endl;
    system("pause");
    return 0;
}
Но ответ она выдает неправильный, не могли бы вы посмотреть в чем ошибка, я в принципе даже знаю где она - в вычислении косинуса, но почему она возникает не знаю
Заранее спасибо
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 04:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru