Форум программистов, компьютерный форум, киберфорум
Delphi: Графика, звук, видео
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 28.10.2017
Сообщений: 14
1

Наложить на координатную сетку название областей.

28.10.2017, 23:58. Показов 2117. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите пожалуйста, возможно ли наложить на координатную сетку название областей? Т.е.например, при х от -3 до -2 и при у от 2 до 3 это область N1 , и т.д. и при этом можно было нажать на эту область и появлялось описание этой области? Пробовала обычные кнопки накидать на координатную ось,но тогда перекрываются координаты и сам график прямой не виден..
Миниатюры
Наложить на координатную сетку название областей.  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.10.2017, 23:58
Ответы с готовыми решениями:

Наложить координатную сетку на карту местности
Добрый день есть 4 задачи. 1.Наложить на карту местности координатную сетку 2.Отображать на...

Не получается нарисовать координатную сетку:(
Помогите пожалуйста нарисовать координатную сетку 25х25 тонкими линиями,а то хоть убейте не...

Начертить координатную сетку с параметрами:
1. Точка начала координат (x0,y0) = (10,290); 2. Шаг координатной сетки в пикселях dx,dy =...

Вывести на экран оцифрованную координатную сетку
Помогите пожалуйста, как написать программу которая выводит на экран оцифрованную координатную...

18
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
29.10.2017, 08:49 2
1. можно
2. это совершенно не связанные между собой желания
3. выводите текст по вашим координатам
4. в обработчике OnMouseDown проверяйте, по каким координатам вы кликнули и выясняйте, в какую область попали
и соответственно, выводите что хотите
1
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
29.10.2017, 13:32 3
Лучший ответ Сообщение было отмечено Kristyyy как решение

Решение

Для примера.
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
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
const n=3; //размер матрицы
      d=50; //размеры поля(50Х50)
type pole=record  //тип поле
          x1,y1,x2,y2:integer;//экранные координаты поля
          x11,y11,x12,y12:integer;//реальные координаты поля
          k:integer;//номер поля
          end;
var
  Form1: TForm1;
  a:array[1..2*n,1..2*n] of pole;//матрица полей
implementation
 
{$R *.dfm}
//функция принадлежности точки полю
function yes(x,y:integer;p:pole):boolean;
begin
yes:=(x>p.x1)and(x<p.x2)and(y>p.y1)and(y<p.y2);
end;
//зададим некоторые параметры
procedure TForm1.FormCreate(Sender: TObject);
begin
ClientHeight:=d*2*(n+1);
ClientWidth:=600;
Position:=poScreenCenter;
ClientWidth:=ClientHeight+300;
with Memo1 do
 begin
  left:=Form1.ClientWidth-250;
  width:=200;
  top:=d div 2;
  height:=Form1.ClientHeight-d;
 end;
end;
//рисуем поля и координаты
procedure TForm1.FormPaint(Sender: TObject);
var x0,y0,i,j,k,x,y:integer;
begin
x0:=ClientWidth div 3;
y0:=ClientHeight div 2;
with Canvas do
 begin
  //оси координат
  pen.Width:=2;
  pen.Color:=clBlue;
  moveto(x0-n*d,y0);
  lineto(x0+n*d+20,y0);
  moveto(x0,y0-n*d-20);
  lineto(x0,y0+n*d);
  moveto(x0,y0-n*d-20);
  lineto(x0-5,y0-n*d);
  moveto(x0,y0-n*d-20);
  lineto(x0+5,y0-n*d);
  font.Color:=clBlue;
  font.Style:=[fsBold];
  textout(x0+10,y0-n*d-20,'Y');
  moveto(x0+n*d+20,y0);
  lineto(x0+n*d,y0-5);
  moveto(x0+n*d+20,y0);
  lineto(x0+n*d,y0+5);
  textout(x0+n*d+10,y0-20,'X');
  //координатная сетка
  pen.Width:=1;
  for i:=1 to n do
   begin
    moveto(x0+i*d,y0-n*d); lineto(x0+i*d,y0+n*d);
    moveto(x0-n*d,y0-i*d); lineto(x0+n*d,y0-i*d);
    moveto(x0-i*d,y0-n*d); lineto(x0-i*d,y0+n*d);
    moveto(x0-n*d,y0+i*d); lineto(x0+n*d,y0+i*d);
    textout(x0+i*d-10,y0+5,inttostr(i));
    textout(x0-i*d+5,y0+5,inttostr(-i));
    textout(x0-15,y0-i*d+5,inttostr(i));
    textout(x0-15,y0+i*d-20,inttostr(-i));
   end;
  //подписи имен полей 
  font.Color:=clBlack;
  k:=0;
  y:=y0-round(2.5*d);
  for i:=1 to 2*n do
   begin
    x:=x0-round(2.5*d);
    for j:=1 to 2*n do
     begin
      inc(k);
      textout(x-5,y-5,'N'+inttostr(k));
      x:=x+d;
     end;
    y:=y+d;
   end;
 end;
//создадим матрицу полей 
k:=0;
x:=x0-n*d;
y:=y0-n*d;
for i:=1 to 2*n do
for j:=1 to 2*n do
 begin
  a[i,j].x1:=x+(j-1)*d;
  a[i,j].y1:=y+(i-1)*d;
  a[i,j].x2:=a[i,j].x1+d;
  a[i,j].y2:=a[i,j].y1+d;
  a[i,j].x11:=j-n-1;
  a[i,j].y11:=n-i+1;
  a[i,j].x12:=a[i,j].x11+1;
  a[i,j].y12:=a[i,j].y11-1;
  inc(k);
  a[i,j].k:=k;
 end;
end;
//нажатие в поле
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var i,j:integer;
begin
for i:=1 to 2*n do
for j:=1 to 2*n do
if yes(x,y,a[i,j]) then
Memo1.Lines.Add('N'+inttostr(a[i,j].k)+' это поле с координатами '+
                '[('+inttostr(a[i,j].x11)+';'+inttostr(a[i,j].y11)+
                ');('+inttostr(a[i,j].x12)+';'+inttostr(a[i,j].y12)+
                ')]');
 
end;
Вложения
Тип файла: rar Выбор полей.rar (160.3 Кб, 13 просмотров)
1
0 / 0 / 0
Регистрация: 28.10.2017
Сообщений: 14
29.10.2017, 16:16  [ТС] 4
Спасибо Вам большое за помощь!

Добавлено через 1 час 4 минуты
Подскажите, а где задается шаг координатной сетки? Т.е. если сделать координаты не 0,-1,-2,-3.... а 0, -2, -4, -6?
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
29.10.2017, 16:23 5
Лучший ответ Сообщение было отмечено Kristyyy как решение

Решение

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//координатная сетка
  pen.Width:=1;
  for i:=1 to n do
   begin
    moveto(x0+i*d,y0-n*d); lineto(x0+i*d,y0+n*d);
    moveto(x0-n*d,y0-i*d); lineto(x0+n*d,y0-i*d);
    moveto(x0-i*d,y0-n*d); lineto(x0-i*d,y0+n*d);
    moveto(x0-n*d,y0+i*d); lineto(x0+n*d,y0+i*d);
//можно здесь
    textout(x0+i*d-10,y0+5,inttostr(2*i));
    textout(x0-i*d+5,y0+5,inttostr(-2*i));
    textout(x0-15,y0-i*d+5,inttostr(2*i));
    textout(x0-15,y0+i*d-20,inttostr(-2*i));
   end;
Добавлено через 3 минуты
Тогда здесь тоже исправить(если конечно это нужно)
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//создадим матрицу полей 
k:=0;
x:=x0-n*d;
y:=y0-n*d;
for i:=1 to 2*n do
for j:=1 to 2*n do
 begin
  a[i,j].x1:=x+(j-1)*d;
  a[i,j].y1:=y+(i-1)*d;
  a[i,j].x2:=a[i,j].x1+d;
  a[i,j].y2:=a[i,j].y1+d;
//вот это!!!
  a[i,j].x11:=2*(j-n-1);
  a[i,j].y11:=2*(n-i+1);
  a[i,j].x12:=a[i,j].x11+2;
  a[i,j].y12:=a[i,j].y11-2;
  inc(k);
  a[i,j].k:=k;
 end;
end;
1
0 / 0 / 0
Регистрация: 28.10.2017
Сообщений: 14
29.10.2017, 16:24  [ТС] 6
Вы -супер! Благодарю!!!
0
0 / 0 / 0
Регистрация: 28.10.2017
Сообщений: 14
29.10.2017, 18:16  [ТС] 7
А не подскажите еще? Как построить полученные т.С и т.М на самой плоскости? и провести линию из нуля до точки М?
Вложения
Тип файла: rar пробное.rar (179.7 Кб, 6 просмотров)
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
29.10.2017, 18:29 8
Понятия не имею. Хотя бы знать полное условие задачи. Да еще Вы в моем коде напакостили .
0
0 / 0 / 0
Регистрация: 28.10.2017
Сообщений: 14
29.10.2017, 18:35  [ТС] 9
требуется по введенным данным посчитать координаты точки С и нанести ее на плоскость, затем в зависимости от координат т.С высчитать значение т.М, нанести эту точку на плоскость. А затем из начала координат провести линию в полученную т.М
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
29.10.2017, 18:55 10
Цитата Сообщение от Kristyyy Посмотреть сообщение
посчитать координаты точки С и нанести ее на плоскость
Масштаб не нужно, он равен d, которая объявлена как глобальная, там же нужно объявить x0,y0, убрав их из процедуры FormPaint.
если правильно понял название переменных для координат т.С, то нарисовать ее так.
Delphi
1
2
Image1.Canvas.Brush.Color:=clRed;
ellipse(x0+round(Xrinotr*d-2,y0-round(Ymicromacro*d)-2,x0+round(Xrinotr*d+2,y0-round(Ymicromacro*d)+2),
Аналогично точку М.
Цитата Сообщение от Kristyyy Посмотреть сообщение
из начала координат провести линию в полученную т.М
Delphi
1
2
Image1.Canvas.Moveto(x0,y0);
Image1.Canvas.Lineto(x0+round(Mx*d),y0-round(My*d));
Добавлено через 1 минуту
Mx,My замените на ваши переменные координат точки М.
0
0 / 0 / 0
Регистрация: 28.10.2017
Сообщений: 14
29.10.2017, 23:31  [ТС] 11
но если я уберу x0,y0 из процедуры FormPaint, то у меня не построится координатная сетка с полями?
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
30.10.2017, 08:13 12
Цитата Сообщение от Kristyyy Посмотреть сообщение
если я уберу x0,y0
Так их нужно перенести в глобальные, я зря написал про d, она константа
Delphi
1
2
3
4
var
  Form1: TForm1;
  a:array[1..2*n,1..2*n] of pole;//матрица полей
  x0,y0:integer;//начало координат,  глобальные, для всех процедур
А здесь убрать
Delphi
1
2
procedure TForm1.FormPaint(Sender: TObject);
var i,j,k,x,y:integer;
0
0 / 0 / 0
Регистрация: 28.10.2017
Сообщений: 14
30.10.2017, 21:16  [ТС] 13
у нас же нет компонента Image1?
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
31.10.2017, 09:33 14
Извините, не было инета. Конечно нет, я рисую на канве формы в процедуре TForm1.FormPaint.
0
0 / 0 / 0
Регистрация: 28.10.2017
Сообщений: 14
31.10.2017, 16:06  [ТС] 15
А как тогда на этой канве нарисовать график? Вы писали :

Image1.Canvas.Moveto(x0,y0);
Image1.Canvas.Lineto(x0+round(Mx*d),y0-round(My*d));
Добавлено через 1 минуту
Mx,My замените на ваши переменные координат точки М.

Но Image1 у нас же нет?
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
31.10.2017, 16:11 16
Это я написал не глядя
На канве формы это так
Delphi
1
2
3
4
5
with Canvas do
 begin
  Moveto(x0,y0);
  Lineto(x0+round(Mx*d),y0-round(My*d));
 end;
Цитата Сообщение от Kristyyy Посмотреть сообщение
Mx,My замените на ваши переменные координат точки М.
У меня их нет, это же Ваши точки.
0
0 / 0 / 0
Регистрация: 28.10.2017
Сообщений: 14
31.10.2017, 20:02  [ТС] 17
Здесь же тоже надо как-то учитывать масштаб координатной сетки? нужно что-то умножить на 2?
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
31.10.2017, 20:03 18
У нас масштаб это ширина сетки d.
0
0 / 0 / 0
Регистрация: 28.10.2017
Сообщений: 14
13.11.2017, 10:49  [ТС] 19
)
0
13.11.2017, 10:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.11.2017, 10:49
Помогаю со студенческими работами здесь

Построить координатную сетку и график функции
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ 1. Очистить экран монитора и при необходимости установить ...

Как добавить координатную сетку в picturebox?
Программа рисует фигуры в picture box, но отсчет начинается с левого верхнего угла, а как...

Вывести в консоль оцифрованную координатную сетку
Написать программу, которая выводит на экран оцифрованную координатную сетку. ( в консоли )...

Вывести на экран оцифрованную координатную сетку
Написать программу, которая выводит на экран оцифрованную координатную сетку.


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

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