Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 10.12.2018
Сообщений: 33

Вращение квадрата

17.09.2019, 16:31. Показов 3667. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как можно поворачивать квадрат? Я так понял, с rectangle это не прокатит, а как это реализовать через lineto? Т.е. подал число в edit - это число градус, на который нужно повернуть кв. Как это реализовать?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.09.2019, 16:31
Ответы с готовыми решениями:

Известна диагональ квадрата d. Вычислить площадь S и периметр P квадрата
Известна диагональ квадрата d. Вычислить площадь S и периметр P квадрата.

Известна диагональ квадрата d Вычислить площадь S и периметр P квадрата
Разработать программу в среде программирования Lazarus. Для задачи создать интерфейс, соответствующий условию. Известна диагональ...

Рекурсия: создать программу которая будет рисовать квадрат, в нем еще 4 квадрата, в левом верхнем опять 4 квадрата и так далее.
Помогите пожалуйста, нужно создать программу которая будет рисовать квадрат, в нем еще 4 квадрата, в левом верхнем опять 4 квадрата и так...

9
 Аватар для mr-Crocodile
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
17.09.2019, 17:08
Цитата Сообщение от Донил Посмотреть сообщение
Как можно поворачивать квадрат?
относительно чего, где центр поворота?

Цитата Сообщение от Донил Посмотреть сообщение
а как это реализовать
процедуру на таймер

стираешь квадрат.
изменяешь угол на заданную величину.
пересчитываешь координаты по формуле
выводишь новый квадрат

можешь попробовать что-то вроде
Pascal
1
  Rectangle(round(x + r * cos(ang)), round(y + r * sin(ang)), round(x + r * cos(ang)) + dl, round(y + r * sin(ang)) + sh);
где x,y - это координаты центра
ang - угол поворота
r - расстояние от центра до вершин квадрата
0
 Аватар для GoodWeather
886 / 588 / 179
Регистрация: 28.02.2017
Сообщений: 2,359
Записей в блоге: 1
17.09.2019, 17:41
Цитата Сообщение от Донил Посмотреть сообщение
с rectangle это не прокатит
Да, этот метод/функции рисуют только линиями параллельными осям координат.
Цитата Сообщение от Донил Посмотреть сообщение
а как это реализовать через lineto?
эм... Нарисовать четыре линии.
Так как холст запоминает последнюю координату пера - понадобится четыре LineTo и всего один MoveTo (в начале).
Цитата Сообщение от Донил Посмотреть сообщение
на который нужно повернуть кв
Можно "логически" поворачивать холст, а рисовать обычным Rectangle.

Добавлено через 2 минуты
Хотя ещё можно делать Polygon по точкам, возможно будет чем-то удобнее.

Добавлено через 11 минут
Про центр поворота - это да, это важно знать. Где он должен быть у вас?
0
17.09.2019, 17:42

Не по теме:

Цитата Сообщение от mr-Crocodile Посмотреть сообщение
можешь попробовать что-то вроде
Pascal
1
* Rectangle(round(x + r * cos(ang)), round(y + r * sin(ang)), round(x + r * cos(ang)) + dl, round(y + r * sin(ang)) + sh);
нет, не пробуй, так не получится.

GoodWeather всё правильно написал!

0
Модератор
4147 / 2358 / 812
Регистрация: 15.11.2015
Сообщений: 9,436
17.09.2019, 17:57
Цитата Сообщение от Донил Посмотреть сообщение
а как это реализовать через lineto?
Взять 4 точки и поворачивать их и рисовать линии от одной точки к другой. Возможно, через полигон будет в чём-то проще это сделать.
С координатами, чтобы не изобретать велосипед, можно взять двумерную графику, вершины положить в массивы-столбцы, построить матрицу поворота и потом умножать столбцы с координатами вершин на матрицы поворота и так получать новые координаты уже повёрнутого прямоугольника.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
17.09.2019, 20:30
Delphi
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
var
  Form1: TForm1;
  p:array of TPoint;
  x0,y0,r:integer;
  a:double;
implementation
 
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
x0:=clientwidth div 2;
y0:=clientheight div 2;
r:=y0-50;
setlength(p,5);
Timer1.Interval:=50;
doublebuffered:=true;
end;
procedure TForm1.FormPaint(Sender: TObject);
var u:double;
    i:integer;
begin
u:=a;
for i:=0 to 4 do
 begin
  p[i].x:=x0+round(r*cos(u));
  p[i].y:=y0+round(r*sin(u));
  u:=u+pi/2;
 end;
with Canvas do
 begin
  Pen.Width:=2;
  Polygon(p);
 end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
a:=a+0.1;
repaint;
end;
0
17.09.2019, 20:51

Не по теме:

Никогда не любопытствовал об новшествах VCL.Canvas в свежих версиях Делфи...
А как оказалось, их походу до сих пор тупо нету. Уже кучу лет назад должны были ввести уже хотя бы базовые трансформации холста!

0
0 / 0 / 0
Регистрация: 10.12.2018
Сообщений: 33
17.09.2019, 21:58  [ТС]
А не могли бы вы пожалуйста пояснения добавить, мне еще не встречалась обрисовка с помощью polygon. Спасибо.
0
Модератор
4147 / 2358 / 812
Регистрация: 15.11.2015
Сообщений: 9,436
17.09.2019, 22:10
Донил, какие именно пояснения? Заполняется массив координат и по нему система строит полигон. Цвет и стиль границы заданы соответствующими свойствами Canvas.Pen Color и Style, и заполняется полигон цветом и стилем, указанным у Canvas.Brush.

Добавлено через 1 минуту
При желании можно и картинкой заполнить.
0
0 / 0 / 0
Регистрация: 10.12.2018
Сообщений: 33
17.09.2019, 22:56  [ТС]
Спасибо, но пояснений никаких не нужно, сделал сам через lineto и moveto. Все что о них я узнал, это комментарий GoodWeather. Мне этого хватило.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.09.2019, 22:56
Помогаю со студенческими работами здесь

JS вращение квадрата
Доброе время суток! Я только начинаю изучать JS. Помогите решить задачу. Нужно сделать PageTransitions только который работает как...

Вращение квадрата
Практического применения нет. Берем из <текстовика значения: 1 2 3 4 5 6 7 8 9 И вращаем по часовой, чтобы получилось...

Вращение квадрата
Помогите пожалуйста! Устала мучаться... не вижу своей ошибки. (defun VVOD () (setq p1(GETPOINT "\n введите точку...

Вращение квадрата
Квадрат нарисован с помощью 4-х линий(а вообще можно и с помощью pygame.draw.rect) и нужно сделать так, что бы он варщался вокруг себя по...

Вращение квадрата Язык С
Осуществить вращение квадрата вокруг точки лежащей на продолжении горизонтальной оси! Очень нужно, срочно! Язык Си


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru