Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.03.2012, 23:25   #1
mashat99
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 10
По умолчанию Четырёхугольник задается координатами вершин. Нужно найти его площадь ( на C )

4-угольник задается координатами вершин. Нужно найти его площадь. По идее должно работать, но в результате постоянно 0((..

Код:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

int main()

{
    float x1, y1, x2, y2, x3, y3, x4, y4, a, b, c, d, k, p1, p2, s1, s2, s;
    printf("Vvedit' koordunatu vershun 4-ka");
    scanf ("%d%d%d%d%d%d%d%d",&x1, &y1, &x2, &y2, &x3, &y3, &x4, &y4);
    a=sqrt(pow((x2-x1),2)+pow((y2-y1),2));
    b=sqrt(pow((x3-x2),2)+pow((y3-y2),2));
    c=sqrt(pow((x4-x3),2)+pow((y4-y3),2));
    d=sqrt(pow((x1-x4),2)+pow((y1-y4),2));
    k=sqrt(pow((x3-x1),2)+pow((y3-y1),2));
    p1=(a+b+k)/2;
    p2=(k+d+c)/2;
    s1=sqrt(p1*(p1-a)*(p1-b)*(p1-k));
    s2=sqrt(p2*(p2-k)*(p2-d)*(p2-c));
    s=s1+s2;
    printf("s=%d", s);
    system("pause");
    return 0;
    }
mashat99 вне форума Ответить с цитированием
Старый 07.03.2012, 00:22   #2
b2soft
Упртй программер
Форумчанин
 
Регистрация: 26.11.2009
Сообщений: 150
По умолчанию

http://ru.wikipedia.org/wiki/%D0%A4%...BF%D1%82%D1%8B

Вроде так можно

А у Вас немного по-другому как -то)
Помощь с кодом/лабами по С/С++
Контакты: ICQ 623334555 Skype: btwosoft; Mail: b2soft@yandex.ru

Последний раз редактировалось b2soft; 07.03.2012 в 00:28.
b2soft вне форума Ответить с цитированием
Старый 07.03.2012, 00:29   #3
mashat99
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 10
По умолчанию

да, и так можно, будет еще короче...
но у меня была проблема в типе данных) уже все работает)
mashat99 вне форума Ответить с цитированием
Старый 07.03.2012, 08:11   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Вот только случай невыпуклого четырёхугольника не рассмотрен. Так что, предвижу сложности для вас.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 07.03.2012, 09:25   #5
Joeymax
Пользователь
 
Регистрация: 17.01.2012
Сообщений: 14
По умолчанию

На самом деле, правильнее нужно определиться с понятием четырехугольника -
Допустим, ввели 4-е координаты четырех точек (x,y): Например: (1,1), (0,1), (1,0), (0,0). Что здесь считать четырехугольником? Последовательный проход от первой точки ко второй, далее к третьей и от последней к первой четырехугольника не получить. Тогда может стоит "или стоИт :-)" определить самую близкую и самую далекую точки от оси координат, построить треугольники к остальным точкам, учесть расположение этих точек по одну сторону или разные стороны от по прямой соединяющей ближайшую и удаленнейшую точки. В смысле суммировать или минусовать площади полученных треугольников.
Joeymax вне форума Ответить с цитированием
Старый 07.03.2012, 10:11   #6
Joeymax
Пользователь
 
Регистрация: 17.01.2012
Сообщений: 14
По умолчанию

Кстати, граничные случаи требуют особого внимания, для примера: -введены координаты (1,0), (0,1), (2,0),(0,2). Логичнее всего предположить, что это трапеция, но если выбрать в качестве опорных точек первую и третью, а затем строить треугольники к двум остальным, получим непонятно, что :-), и конечно, прав DiemonStar, какие точки и с какими соединять для образования сторон в случае невыпуклого четырехугольника.

Последний раз редактировалось Joeymax; 07.03.2012 в 10:41.
Joeymax вне форума Ответить с цитированием
Старый 07.03.2012, 12:06   #7
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,303
По умолчанию

Код:
#include <stdio.h>
#include <math.h>

#define SIZE 4

float Angle(float*, float*);  //Расчет синуса угла между двумя векторами
float Length(float*);          //Подсчет длины вектора

int main(void)
{
	float x[SIZE] = {0};   
	float y[SIZE] = {0};

	printf("Please, Input the coord of tops\n");
	
	for(int i = 0; i < SIZE; i++)
	{
		scanf("%f%f",&x[i],&y[i]);
		printf("%2.5f, %2.5f\n",x[i],y[i]);
	}

	float D1[2] = {0};
	float D2[2] = {0};

	D1[0] = x[2] - x[0];    //координаты вектора первой диагонали по Х
	D1[1] = y[2] - y[0];    //координаты вектора первой диагонали по Y

	D2[0] = x[3] - x[1];    //координаты вектора второй диагонали по X
	D2[1] = y[3] - y[1];    //координаты вектора второй диагонали по Y

	float SinAn = Angle(D1,D2);

	float S = Length(D1)*Length(D2)*SinAn/2;   //Подсчет площади.

	printf("Area of the figure is: %f\n",S);
	
	return 0;
}

float Angle(float* V1, float* V2)
{
	float Cosin = (V1[0]*V2[0] + V1[1]*V2[1])/(Length(V1)*Length(V2));
	return (float) sqrt(1 - Cosin*Cosin);
}

float Length(float* V)
{
	return (float) sqrt(V[0]*V[0] + V[1]*V[1]);
}
Рабочий код.

P.S.
Если подумать, то эта хрень еще и площадь треугольников считает.
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.

Последний раз редактировалось MooNDeaR; 07.03.2012 в 12:19.
MooNDeaR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
На языке Си++ Определить, лежит ли данная точка на одной из сторон треугольника, заданного координатами его вершин. Марисабель Помощь студентам 1 02.12.2011 19:11
Определите, лежит ли данная точка на одной из сторон треугольника, заданного координатами его вершин. Марисабель Помощь студентам 0 02.12.2011 18:20
ООП (паскаль) - дан ромб. найти площадь. построить пирамиду, найти её площадь Rfn.if Помощь студентам 0 27.04.2011 16:10
Треугольник на плоскости задан координатами своих вершин.Найти координаты точки пересечения его медиан. Silver23 Помощь студентам 2 13.01.2010 15:59
Найти объём куба и площадь его боковой поверхности BASIC Ветренная Помощь студентам 23 02.06.2008 13:15