Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
20 / 13 / 9
Регистрация: 05.12.2014
Сообщений: 124
1

Произвольная фигура и её размеры

05.12.2014, 09:55. Показов 1110. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Подскажите, пожалуйста, как лучше выполнить задание? Что использовать? Задание, собственно, следующее : программа должна быть написана в borland c++ builder 6. Программа должна создавать произвольную фигуру и выставлять размеры. Ввод данных : пользователем, из тхт файла, случайная генерация. В принципе из совсем не понятного для меня в этом задании только одно - как поставлять размеры? Допустим сделали размерные линии, но с помощью чего над ними выставить размеры?

З.ы. может у кого-нибудь есть уже выполненная программа похожего типа?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.12.2014, 09:55
Ответы с готовыми решениями:

UserControl + Фигура связать размеры
И так: есть своя фигура(на заднем фоне задана отдельным контролом) нужно связать размеры той фигуры...

Заданы размеры прямоугольного отверстия и размеры кирпича. Определить, пройдет ли кирпич в отверстие
Заданы размеры прямоугольного отверстия A,B и размеры кирпича X,Y,Z. Определить, пройдет ли кирпич...

Заданы размеры прямоугольного отверстия A,B и размеры кирпича X,Y,Z. Определить, пройдет ли кирпич в отверстие
Помогите пожалуйста решить задачу на С++ про кирпич Условие: Заданы размеры прямоугольного...

Заданы размеры A, B прямоугольного отверстия и размеры X, Y, Z кирпича. Определить, пройдет ли кирпич через отверстие
Не очень понимаю как в программе все это определить. Объясните пожалуйста, если можно с кодом :)

2
случайный прохожий
2935 / 1951 / 606
Регистрация: 20.07.2013
Сообщений: 5,159
05.12.2014, 12:40 2
1. Размеры определяются как разница между максимальной и минимальной точками / координатами по оси х и у (например, в пикселях, хотя ничто не мешает, допустим, считать 1 пиксель равным 1 см).
2. Есть функция для вывода текста на канву (Canvas), называется TextOut (без учета разновидностей вроде TextOutA, TextOutW и т.д. и т.п.). Она "размещает" текст по указанным в ней координатам.
0
случайный прохожий
2935 / 1951 / 606
Регистрация: 20.07.2013
Сообщений: 5,159
05.12.2014, 15:08 3
Лучший ответ Сообщение было отмечено 4ewka как решение

Решение

Так как Builder 6, то ниже "решение в лоб". Но нет предела совершенствованию и оптимизации.
Выбрал вариант три - случайная генерация. Создаются три точки и по ним на форме строится треугольник (может получиться и вырожденный вариант, проверка на "правильность" не производится). Потом происходит "отрисовка" размерных линий. Числовые значения выдаются в пикселях.
Для своей среды используй подходящий аналог TextOutW. Ну, вроде все.
Далее код, скрин и ехе.
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
82
83
84
85
86
87
88
89
90
91
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  Refresh();
// у меня
// ClientWidth = 800;
// ClientHeight = 600;
  const count = 3, border = 100, size_line_dist_from_obj = 30, arrow_size = 10;
  int i, x[count], y[count], xmax = border, xmin = ClientWidth - border, ymax = border/2, ymin = ClientHeight - border/2;
  int index_xmax, index_xmin, index_ymax, index_ymin;
  randomize();
  // генерируем случайные точки
  for (i = 0; i < count; i++)
  {
    x[i] = random(ClientWidth - border*2) + border;
    y[i] = random(ClientHeight - border) + border/2;
  }
 
  // находим крайние точки и их индексы
  for (i = 0; i < count; i++)
  {
    if (x[i] > xmax)
    {
      xmax = x[i];
      index_xmax = i;
    }
    if (x[i] < xmin)
    {
      xmin = x[i];
      index_xmin = i;
    }
    if (y[i] > ymax)
    {
      ymax = y[i];
      index_ymax = i;
    }
    if (y[i] < ymin)
    {
      ymin = y[i];
      index_ymin = i;
    }
  }
 
  // рисуем размерные линии, включая стрелки
  // фигуру рисуем в конце (координаты точек уже известны), см. комментарий ниже
  Canvas->Pen->Color = clSilver;
 
  Canvas->MoveTo(xmin-size_line_dist_from_obj, ymin);
  Canvas->LineTo(x[index_ymin], ymin);
 
  Canvas->MoveTo(xmin-size_line_dist_from_obj, ymin);
  Canvas->LineTo(xmin-size_line_dist_from_obj-arrow_size/2, ymin+arrow_size);
  Canvas->MoveTo(xmin-size_line_dist_from_obj, ymin);
  Canvas->LineTo(xmin-size_line_dist_from_obj+arrow_size/2, ymin+arrow_size);
 
  Canvas->MoveTo(xmin-size_line_dist_from_obj, ymin);
  Canvas->LineTo(xmin-size_line_dist_from_obj, ymax);
  Canvas->LineTo(x[index_ymax], ymax);
 
  Canvas->MoveTo(xmin-size_line_dist_from_obj, ymax);
  Canvas->LineTo(xmin-size_line_dist_from_obj-arrow_size/2, ymax-arrow_size);
  Canvas->MoveTo(xmin-size_line_dist_from_obj, ymax);
  Canvas->LineTo(xmin-size_line_dist_from_obj+arrow_size/2, ymax-arrow_size);
 
  Canvas->MoveTo(xmin, ymax+size_line_dist_from_obj);
  Canvas->LineTo(xmin, y[index_xmin]);
 
  Canvas->MoveTo(xmin, ymax+size_line_dist_from_obj);
  Canvas->LineTo(xmin+arrow_size, ymax+size_line_dist_from_obj-arrow_size/2);
  Canvas->MoveTo(xmin, ymax+size_line_dist_from_obj);
  Canvas->LineTo(xmin+arrow_size, ymax+size_line_dist_from_obj+arrow_size/2);
 
  Canvas->MoveTo(xmin, ymax+size_line_dist_from_obj);
  Canvas->LineTo(xmax, ymax+size_line_dist_from_obj);
  Canvas->LineTo(xmax, y[index_xmax]);
 
  Canvas->MoveTo(xmax, ymax+size_line_dist_from_obj);
  Canvas->LineTo(xmax-arrow_size, ymax+size_line_dist_from_obj-arrow_size/2);
  Canvas->MoveTo(xmax, ymax+size_line_dist_from_obj);
  Canvas->LineTo(xmax-arrow_size, ymax+size_line_dist_from_obj+arrow_size/2);
 
  // выводим текст
  Canvas->TextOutW((xmax+xmin)/2-size_line_dist_from_obj/3, ymax+size_line_dist_from_obj/2, String(xmax-xmin));
  Canvas->TextOutW(xmin-size_line_dist_from_obj*1.75, (ymax+ymin)/2-size_line_dist_from_obj/3, String(ymax-ymin));
 
  // рисуем фигуру (треугольник); делаем это в конце для того, чтобы размерные линии не "затирали" часть фигуры
  Canvas->Pen->Color = clBlack;
  Canvas->MoveTo(x[0], y[0]);
  Canvas->LineTo(x[1], y[1]);
  Canvas->LineTo(x[2], y[2]);
  Canvas->LineTo(x[0], y[0]);
}
Произвольная фигура и её размеры
Вложения
Тип файла: zip create_triangle_with_sizes.zip (58.2 Кб, 5 просмотров)
0
05.12.2014, 15:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.12.2014, 15:08
Помогаю со студенческими работами здесь

Вывести на экран размеры типов и размеры указателей на объекты
Составить программу, которая позволяет вычислить и вывести на экран размеры типов и размеры...

Подогнать размеры картинки под размеры кнопки автоматически
Есть кнопка button1 и файл изображения trololo.bmp. Картинка прямоугольная и больше кнопки, кнопка...

Подстроить размеры TextView под размеры экрана
У меня есть такая разметка &lt;android.support.v4.widget.SwipeRefreshLayout ...

Аннотативные размеры. Не образмериваются размеры при масштабировании
Доброго времени! Решил поэкспериментировать с аннотативными размерами. Создал файл по видео из...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru