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

Даны четыре точки А1(x1, y1), А2(x2, y2), А3(x3, y3), А4(x4, y4). Определить будут ли они вершинами параллелограмма. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.74
пока что чайник
1 / 1 / 0
Регистрация: 15.02.2011
Сообщений: 41
27.02.2011, 16:50     Даны четыре точки А1(x1, y1), А2(x2, y2), А3(x3, y3), А4(x4, y4). Определить будут ли они вершинами параллелограмма. #1
Даны четыре точки А1(x1, y1), А2(x2, y2), А3(x3, y3), А4(x4, y4). Определить будут ли они вершинами параллелограмма.(помогите пожалуйста,не могу сделать)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2011, 16:50     Даны четыре точки А1(x1, y1), А2(x2, y2), А3(x3, y3), А4(x4, y4). Определить будут ли они вершинами параллелограмма.
Посмотрите здесь:

C++ Даны целые числа. Выяснить, найдутся ли среди точек четыре таких, которые являются вершинами квадрата
C++ Даны три положительных числа а, b, с. Проверить, будут ли они сторонами треугольника. Если да, то вычислить площадь этого треугольника.
даны стороны двух прямоугольников. определить, будут ли эти прямоугольники равновеликими, т.е имеют ли они равные площади. C++
C++ Диагонали (Четыре точки являются вершинами параллелограмма. Определить длину диагоналей и найти координаты )
Даны координаты трех точек на плоскости. Если они могут быть вершинами равнобедренного остроугольного треугольника, вычислить его площадь. Где ошибка? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ma3a
Эксперт C++
612 / 456 / 31
Регистрация: 28.01.2011
Сообщений: 605
27.02.2011, 16:58     Даны четыре точки А1(x1, y1), А2(x2, y2), А3(x3, y3), А4(x4, y4). Определить будут ли они вершинами параллелограмма. #2
Можно брать векторы вида {x2 - x1, y2 - y1} ... по сторонам этой фигуры и смотреть модули попарных векторных произведений, полагая третью координату нулем у исходных векторов.
IrineK
Заблокирован
27.02.2011, 17:10     Даны четыре точки А1(x1, y1), А2(x2, y2), А3(x3, y3), А4(x4, y4). Определить будут ли они вершинами параллелограмма. #3
Жестоко.
Достаточно проверить, что противоположные стороны попарно равны.
hepr
 Аватар для hepr
60 / 32 / 5
Регистрация: 21.10.2010
Сообщений: 538
27.02.2011, 17:27     Даны четыре точки А1(x1, y1), А2(x2, y2), А3(x3, y3), А4(x4, y4). Определить будут ли они вершинами параллелограмма. #4
Цитата Сообщение от IrineK Посмотреть сообщение
Жестоко.
Достаточно проверить, что противоположные стороны попарно равны.
+1, а саму сторону вычислить по Sqrt((x1-x2)^2+(y1-y2)^2)(по-моему, точно не помню)
Ma3a
Эксперт C++
612 / 456 / 31
Регистрация: 28.01.2011
Сообщений: 605
27.02.2011, 17:29     Даны четыре точки А1(x1, y1), А2(x2, y2), А3(x3, y3), А4(x4, y4). Определить будут ли они вершинами параллелограмма. #5
Естественно, просто сказал первую мысль , что пришла в голову
IrineK
Заблокирован
28.02.2011, 00:05     Даны четыре точки А1(x1, y1), А2(x2, y2), А3(x3, y3), А4(x4, y4). Определить будут ли они вершинами параллелограмма. #6
Цитата Сообщение от IrineK Посмотреть сообщение
Достаточно проверить, что противоположные стороны попарно равны.
Проверяем:

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>
#include <math.h>
using namespace std;
 
//длина стороны АВ
double side(double xa, double ya, double xb, double yb)
{return sqrt((xb-xa)*(xb-xa)+(yb-ya)*(yb-ya));}
 
//отклонение С от АВ
double deviation(double x1, double y1, double x2, double y2, double x3, double y3)
{
    double r=side(x1,y1,x2,y2);
    double A=(y2-y1)/r;
    double B=(x2-x1)/r;
    double C=(x1*(y2-y1)-y1*(x2-x1))/r;
    return (x3*A-y3*B-C);
}
 
int main()
{
setlocale(LC_ALL, "");
double x[4],y[4];
int i,j, yes=0;
 
cout<<"Введите координаты точек\n";
for(i=0;i<4;i++)
{
    cout<<"x["<<i+1<<"] = ";
        cin>>x[i];
    cout<<"y["<<i+1<<"] = ";
        cin>>y[i];
}
 
//Проверка на совпадение двух точек
for(i=0;i<3;i++)
    for(j=i+1;j<4;j++)
        if(side(x[i],y[i],x[j],y[j])==0) 
            {   cout<<"Две точки совпадают\n";
                system("pause");
                return 0;
            }
//Проверка на находжение трех точек на одной прямой
double dev12_3 = deviation(x[0],y[0],x[1],y[1],x[2],y[2]);
double dev12_4 = deviation(x[0],y[0],x[1],y[1],x[3],y[3]);
double dev23_4 = deviation(x[1],y[1],x[2],y[2],x[3],y[3]);
double dev13_4 = deviation(x[0],y[0],x[2],y[2],x[3],y[3]);
if(dev12_3==0 || dev12_4==0 || dev23_4==0 || dev13_4==0)
        {   cout<<"Три точки лежат на одной прямой\n";
            system("pause");
            return 0;
        }
 
cout<<"Множество точек образует четырехугольник\n";
system("pause");
 
//определяем диагональ, проходящую через А1
//если А1А2 - диагональ, попарные стороны "А1А3/А2А4" "А2А3/А1А4"
//если А1А3 - диагональ, попарные стороны "А1А2/А3А4" "А2А3/А1А4"
//если А1А4 - диагональ, попарные стороны "А1А2/А3А4" "А2А4/А1А3"
 
double dev13_2 = deviation(x[0],y[0],x[2],y[2],x[1],y[1]);
 
if(dev12_3*dev12_4<0) //диагональ 12
    {if(side(x[0],y[0],x[2],y[2])==side(x[1],y[1],x[3],y[3]) && side(x[1],y[1],x[2],y[2])==side(x[0],y[0],x[3],y[3])) yes++;}
else 
{
    if(dev13_2*dev13_4<0) //диагональ 13
        {if(side(x[0],y[0],x[1],y[1])==side(x[2],y[2],x[3],y[3]) && side(x[1],y[1],x[2],y[2])==side(x[0],y[0],x[3],y[3])) yes++;}
    else  //диагональ 14
        {if(side(x[0],y[0],x[1],y[1])==side(x[2],y[2],x[3],y[3]) && side(x[0],y[0],x[2],y[2])==side(x[1],y[1],x[3],y[3])) yes++;}
}
 
if(yes)
    cout<<"\nЭто - параллелограмм\n";
else
    cout<<"\nЭто - не параллелограмм\n";
 
system("pause");
 
return 0;
}
Ну, и все.
Yandex
Объявления
28.02.2011, 00:05     Даны четыре точки А1(x1, y1), А2(x2, y2), А3(x3, y3), А4(x4, y4). Определить будут ли они вершинами параллелограмма.
Ответ Создать тему
Опции темы

Текущее время: 18:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru