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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 31, средняя оценка - 4.65
Stormfire
0 / 0 / 0
Регистрация: 29.11.2010
Сообщений: 43
#1

Определить координаты вершины треугольника - C++

12.12.2010, 14:36. Просмотров 3935. Ответов 34
Метки нет (Все метки)

Здравствуйте, снова обращаюсь к вам за помощью.
Прошу помочь в таком задании, искал вроде ничего похожего не нашел.

 Комментарий модератора 
Дублирование тем запрещено правилами форума (п. 3.4).
Не плодите одинаковых тем.
0
Миниатюры
Определить координаты вершины треугольника  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2010, 14:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определить координаты вершины треугольника (C++):

Вершины треугольника имеют координаты - C++
Вершины треугольника имеют координаты (0:0) (0:а) (b:0).определить лежит ли точка с координатами (х:y) внутри треугольника

Заданы координаты трех вершин прямоугольника, необходимо определить координаты четвертой вершины - C++
Заданы координаты трех вершин прямоугольника. Необходимо определить координаты четвертой вершины. Можете найти? Добавлено через 1...

Определить координаты четвертой вершины прямоугольника - C++
Пусть даны координаты трех вершин прямоугольника. Определите координаты четвертой вершины.#include<stdio.h> #include<conio.h> int...

Определить координаты вершин прямоугольного треугольника - C++
определить координаты вершин прямоугольника наименьшего периметра содержащего треугольник координаты вершин котрого (x1,y1), (x2,y2),...

Известны координаты вершин треугольника, определить его площадь - C++
#include <iostream> #include <math.h> #include <cmath> using namespace std; int main() { int x,y,z,z1,z2,y1,y2,x1,x2; float...

Заданы координаты трех точек. Определить периметр треугольника, вершинами которого являются заданные точк - C++
Напишите код, пожалуйста С++

34
Patch
2276 / 491 / 11
Регистрация: 01.04.2009
Сообщений: 2,178
12.12.2010, 15:10 #2
из условия следует, что точка С будет стремится к линии AB(ведь площадь должна быть минимальна).
и поскольку стремление это ничем не ограничено, x и y будут бесконечно мало отличаться от координат точки в центре отрезка AB.
как найти координаты центра отрезка подсказать?
x = (0+a)/2; y = (0+b)/2
1
Stormfire
0 / 0 / 0
Регистрация: 29.11.2010
Сообщений: 43
12.12.2010, 17:10  [ТС] #3
хм. Понятно.
В голове крутиться как это сделать, но причем тут тогда показатели ?
0
Patch
2276 / 491 / 11
Регистрация: 01.04.2009
Сообщений: 2,178
12.12.2010, 18:12 #4
Цитата Сообщение от Stormfire Посмотреть сообщение
В голове крутиться как это сделать, но причем тут тогда показатели
не "показатели", а "указатели"
например, так:
C++
1
2
3
4
void mid_coord(int * x1, int * x2)
{
     *x1 = (*x1+*x2)/2
}
0
Stormfire
0 / 0 / 0
Регистрация: 29.11.2010
Сообщений: 43
12.12.2010, 18:16  [ТС] #5
Таки да. Ошибся. Зато в заглавии правильно.
Спасибо, сяду пробывать.
0
BrumbleHorse
121 / 121 / 11
Регистрация: 18.09.2010
Сообщений: 212
22.12.2010, 03:10 #6
"показатель на тип int" это сильно ... я не совсем понимаю зачем в этом задании использовать указатели, если функция не меняет значение своих аргументов, а просто находит координаты третьей вершины.. к тому же в вашем задании координаты целочисленные, одна вершина совпадает с началом координат, так что минимально возможная площадь треугольника = 0,5... координат третьей вершины в итоге получается несколько на выбор.. в моем решении программа выдает первые координаты, удовлетворяющие условию, которые ей встретились..
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
#include <stdio.h>
#include <math.h>
#include <conio.h>
#define X1 0
#define Y1 0
#define MAX 20 /*максимальное значение координаты, можно изменить, если требуется больший диапазон*/
void f_triangle(int* X_2,int* Y_2)
{
  double sqr=0,min=MAX;
  int X2=*X_2,Y2=*Y_2, X3, Y3, fin_X, fin_Y,i,j;
  for(X3=-MAX,i=-MAX;i<MAX;++X3,++i)
  {
      for(Y3=-MAX,j=-MAX;j<MAX;++Y3,++j)
      {
        if(X3==X1&&Y3==Y1)
        break;
        if(X3==X2&&Y3==Y2)
        break;
        sqr=fabs((X2-X1)*(Y3-Y1)-(X3-X1)*(Y2-Y1))/2;
        if(sqr<min&&sqr!=0)
        {
            min=sqr;
            fin_X=X3;
            fin_Y=Y3;
        }
      }
  }
  printf("Your C point coordinates is: %d ; %d\n", fin_X,fin_Y);
}
void main()
{
 int x2, y2;
 int* px=&x2;
 int* py=&y2;
 printf("Please input X coordinate of B point:\n");
 scanf("%d",px);
 printf("Please input Y coordinate of B point:\n");
 scanf("%d",py);
 f_triangle(px,py);
 getch();
}
1
Stormfire
0 / 0 / 0
Регистрация: 29.11.2010
Сообщений: 43
22.12.2010, 05:54  [ТС] #7
Большое спасибо.
Только там наверное abs, а не fabs в строке sqr=fabs((X2-X1)*(Y3-Y1)-(X3-X1)*(Y2-Y1))/2;
с fabs оно оверлодид(
Если не затруднит, не могли б обьяснить как работает програма? Очень хотелось бы понять это(
0
BrumbleHorse
121 / 121 / 11
Регистрация: 18.09.2010
Сообщений: 212
22.12.2010, 11:04 #8
проходим по всем координатам в заданном диапазоне (MAX)
C
1
2
3
4
 for(X3=-MAX,i=-MAX;i<MAX;++X3,++i)
  {
      for(Y3=-MAX,j=-MAX;j<MAX;++Y3,++j)
      {
если координаты 3 вершины совпадают с координатами другой вершины, пропускаем этот проход по циклу:
C
1
2
3
4
if(X3==X1&&Y3==Y1)
        break;
        if(X3==X2&&Y3==Y2)
        break;
Вычисляем площадь, и если она меньше предыдущих и не равна нулю, то запоминаем ее значение и координаты 3 вершины:
C
1
2
3
4
5
6
7
8
9
 sqr=fabs((X2-X1)*(Y3-Y1)-(X3-X1)*(Y2-Y1))/2;
        if(sqr<min&&sqr!=0)
        {
            min=sqr;
            fin_X=X3;
            fin_Y=Y3;
        }
      }
  }
по поводу fabs()- все должно быть нормально, это функция из math.h, принимает double и возвращает double, sqr объявлена как double..в компиляторе GNU GCC никаких проблем не было.. а abs вроде как только для типа int, площадь же у нас не всегда целая
1
Stormfire
0 / 0 / 0
Регистрация: 29.11.2010
Сообщений: 43
22.12.2010, 18:21  [ТС] #9
sqr как double, но int X2=*X_2,Y2=*Y_2, X3, Y3, fin_X, fin_Y,i,j; Задано int.
И если тут поставить double, то fabs начинает работать, но при этом стабильно выдаёт результат 0, -1074790400.

double sqr=0,min=MAX;
int X2=*X_2,Y2=*Y_2, X3, Y3, fin_X, fin_Y,i,j;
sqr=abs((X2-X1)*(Y3-Y1)-(X3-X1)*(Y2-Y1))/2;

При вот таком результате мне не очень понятно, почему оно выбирает такие точки.
Допустим при б(3,3) выдаёт результат с(-20, -19). При б(6,7) выдаёт с(-16, -19).
Разве при А(0,0) б(3,3) какая-нибудь точка с(2,2) не будет давать меньшую площадь треугольника чем с(-20, -19) ?
0
BrumbleHorse
121 / 121 / 11
Регистрация: 18.09.2010
Сообщений: 212
22.12.2010, 20:53 #10
Треугольник с координатами А(0;0) В(3;3) и С(2;2) имеет площадь равную нулю, так как это даже не треугольник, а просто прямая получается.. я же писал, что по вашему заданию минимальная площадь треугольника будет не менее 0,5 при любом раскладе.. при любом выборе координат точки Б будет несколько точек С, которые будут давать эту минимальную площадь.. программа просто выводит первую встретившуюся из этих точек С.. изучите внимательнее формулу площади треугольника, подставьте числа и станет понятнее.. по поводу fabs: аргумент автоматом должен приводиться к double из int, т к это преобразование без потери значимости.. какой компилятор вы используйте?
0
Stormfire
0 / 0 / 0
Регистрация: 29.11.2010
Сообщений: 43
22.12.2010, 21:57  [ТС] #11
Visual Studio 2010 использую.
0
Напильнег
480 / 118 / 10
Регистрация: 30.09.2010
Сообщений: 473
22.12.2010, 22:07 #12
Цитата Сообщение от Patch Посмотреть сообщение
из условия следует, что точка С будет стремится к линии AB(ведь площадь должна быть минимальна).
и поскольку стремление это ничем не ограничено
Стремление это ограничено тем, что координаты целочисленные - это просто препод задание так витеевато записал.

Добавлено через 4 минуты
Цитата Сообщение от BrumbleHorse Посмотреть сообщение
"показатель на тип int" это сильно ... я не совсем понимаю зачем в этом задании использовать указатели,
Я так понимаю, что указатели нужны только для искомых координат x и y, для того, чтобы вернуть их значения, которые вычисляются в функции.

Коряво задание написано, коряво - но голову на плечах надо таки иметь.
0
BrumbleHorse
121 / 121 / 11
Регистрация: 18.09.2010
Сообщений: 212
22.12.2010, 23:11 #13
Цитата Сообщение от Напильнег Посмотреть сообщение
Я так понимаю, что указатели нужны только для искомых координат x и y, для того, чтобы вернуть их значения, которые вычисляются в функции.
Коряво задание написано, коряво - но голову на плечах надо таки иметь.
как-то это странно все равно...зачем их возвращать, если сама функция может их вывести пользователю на экран.. их значения же больше не используются, поэтому нет необходимости задавать эти координаты в main заранее и менять их значения с помощью указателей..
0
Напильнег
480 / 118 / 10
Регистрация: 30.09.2010
Сообщений: 473
22.12.2010, 23:41 #14
Цитата Сообщение от BrumbleHorse Посмотреть сообщение
как-то это странно все равно...зачем их возвращать, если сама функция может их вывести пользователю на экран.
Может. Но по правилам хорошего тона обычно сложная вычислительная процедура только считает, а выводом занимаются в другом месте.
0
BrumbleHorse
121 / 121 / 11
Регистрация: 18.09.2010
Сообщений: 212
22.12.2010, 23:51 #15
Ну тут-то вообще без функции можно обойтись спокойно.. а так да, я не совсем верно понял задание.. надо переделать или автору все понятно?..
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2010, 23:51
Привет! Вот еще темы с ответами:

Даны координаты вершин треугольника и координаты некоторой точки внутри него - C++
Даны координаты вершин треугольника и координаты некоторой точки внутри него. Найти расстояние от данной точки до ближайшей стороны...

Заданы координаты вершин треугольника. Вывести их в порядке обхода треугольника по часовой стрелке - C++
Заданы координаты вершин треугольника.Вывести их в порядке обхода треугольника по часовой стрелке. Вот код, но правильный ли он?! ...

Определить, какие вершины достижимы из заданной вершины S - C++
Подскажите алгоритм для этой задачи, пожалуйста. Достижимые вершины Имя входного файла: graph.in Имя выходного файла: graph.out...

Найти координаты 4 вершины - C++
Та же самая задача, только на Си http://www.cyberforum.ru/turbo-pascal/thread517467.html помогите исправить ошибки, уже умучелся с ней...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
22.12.2010, 23:51
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru