0 / 0 / 1
Регистрация: 09.01.2013
Сообщений: 41
1

Подскажите условия для попадания точки в область с реальными координатами

05.02.2014, 11:49. Показов 1461. Ответов 1
Метки нет (Все метки)

Есть форма 600х400, по середке проходят оси х, у и на ней фигура (ромб) определена в абстрактных координатах х и у (-1..1), но точки при нажатии на форму идут в реальных координатах, подскажите правильный перевод координат и условия попадания (с квадратом проблем нет, а ромб подводит).
Вразумительное условия не вылезает(

Спасибо!

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
unit Unit_1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    lbl_to4ka: TLabel;
    lbl_prinadlejit: TLabel;
    procedure FormPaint(Sender: TObject);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  mousepos: TPoint;
  x0,y0: Integer;
implementation
 
{$R *.dfm}
 
procedure TForm1.FormPaint(Sender: TObject);
  begin
Form1.Canvas.Pen.Color:=clBlack;
// оси
Form1.Canvas.MoveTo(0,200);  Form1.Canvas.LineTo(600,200);  //x
Form1.Canvas.MoveTo(300,0);   Form1.Canvas.LineTo(300,400);  //y
Form1.canvas.TextOut(580,220,'x') ;
Form1.canvas.TextOut(320,20,'y') ;
 
//цифры на осях
 
Form1.Canvas.Font.Size:=5;
// x
form1.canvas.TextOut(190,210,'-1');  form1.canvas.TextOut(290,210,'0');
form1.canvas.TextOut(390,210,'1');
// y
form1.canvas.TextOut(290,90,'-1'); form1.canvas.TextOut(290,310,'1');
 
// форма цели
Form1.Canvas.MoveTo(200,200);  Form1.Canvas.LineTo(300,100);
Form1.Canvas.MoveTo(300,100);  Form1.Canvas.LineTo(400,200);
Form1.Canvas.MoveTo(400,200);  Form1.Canvas.LineTo(300,300);
Form1.Canvas.LineTo(300,300);  Form1.Canvas.LineTo(200,200);
    end;
 
 
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
 
begin
  GetCursorPos(MousePos);
 
  x0:=mousepos.x-form1.left-8; //запоминаем координату x на форме
  y0:=mousepos.y-form1.top-29; //запоминаем координату y на форме
  Form1.Canvas.Pixels[x0,y0]:=clRed;
 
// Невразумительное условие
  if ((x0>=200) and (x0<=400)) and  ((y0>=100) and (y0<=300)) and ((x0+y0>=300)or (x0+y0<=700)) then
             lbl_prinadlejit.Caption:='Принадлежит' +' х ' + IntToStr(x0 div 100 -2) + ' y '+ IntToStr(-y0 div 100 +2)
              else lbl_prinadlejit.Caption:='Не принадлежит'+' х '+IntToStr(x0 div 100 -2) +' y '+ IntToStr(-y0 div 100 +2);
 
 { edt_x1.Text := IntToStr(x0 div 100  );            // для двузначного отображения значения
  edt_y1.Text := IntToStr(y0 div -100  ); }
end;
 
end.
Миниатюры
Подскажите условия для попадания точки в область с реальными координатами  
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.02.2014, 11:49
Ответы с готовыми решениями:

Разработать программу для проверки попадания точки с координатами x и y в указанную на рисунке область
Здравствуйте! Я еще совсем-совсем начинающий программист. Учусь на 1 курсе 1 месяц :). В общем,...

По графику определить условия попадания точки в область!
Дан график: По данному графику мне необходимо написать условие попадания некоторой...

Формулировка условия попадания точки в заданную область
Тема: Исследования попадания точки в заданную область. Цель: Формулировка условия попадания точки...

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

1
30 / 29 / 18
Регистрация: 19.12.2012
Сообщений: 144
Записей в блоге: 1
05.02.2014, 13:14 2
Циферки, циферки... так и жить не захочешь) пытаюсь разобраться где какое число и почему именно оно - как-то не очень... по мне так вот:

1. Для рисования на канве очень удобно делать так:

Delphi
1
2
const W_CENTER = Form1.Width div 2;    //середина по ширине
         H_CENTER = Form1.Height div 2;   //середина по высоте
2. Судя по скрину, твой 1 от твоей оси равен четверти высоты формы => так и запишем:
Delphi
1
const SECTION = H_CENTER div 2;
3. Чем писать условия, лучше воспользоваться функцией, например, такой:

Delphi
1
2
3
4
5
6
7
8
9
10
11
type TAbstract = record
  AbX,AbY:integer;
end;
 
//...
 
function ConvertToAbstact(real_x, real_y: integer):TAbstract;
begin
   result.AbX := real_x div SECTION + 1;
   result.AbY := real_y div SECTION + 1; //сколько отрезков влезет по высоте и ширине
end;
4. А потом в своей функции:

Delphi
1
2
3
4
5
6
7
8
9
x0:=mousepos.x-form1.left-8; //запоминаем координату x на форме
y0:=mousepos.y-form1.top-29; //запоминаем координату y на форме
 
var choosen:TAbstract;
choosen := ConvertToAbstract(x0,y0);
 
if (abs(choosen.x)<=1)and(abs(choosen.y)<=1)
  then //принадлежит
  else //не принадлежит
Вот так как-то, если я правильно понял задачу.

P.S. Компилятора под рукой нету, мог где-то ошибиться, но, думаю, идею ты уловил.

Добавлено через 7 минут

Upd: забыл что твои координаты могут быть отрицательными.

Функция:

Delphi
1
2
3
4
5
6
7
function ConvertToAbstact(real_x, real_y: integer):TAbstract;
begin
   result.AbX := real_x div SECTION + 1;
   result.AbY := real_y div SECTION + 1; //сколько отрезков влезет по высоте и ширине
   if (real_x < W_CENTER) then result.AbX := - result.AbX; //(для абстрактных отрицательных);
   if (real_x > H_CENTER) then result.AbY := - result.AbY;
end;
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.02.2014, 13:14
Помогаю со студенческими работами здесь

Факт попадания точки с координатами в заданную область
Привет форумчане, снова требуется ваша помощь нужно сделать программку, подмогите, выясняющую факт...

Проверка попадания точки с координатами (x, y) в указанную на рисунке область ромба
Помогите, вообще ничего не понятно

Составить программу проверяющую попадания случайной точки с координатами (x,y) в область треугольника
Нужно написать программу. Если можно, то с кратким пояснением к строкам программы. На...

Программа для определения попадания точки с координатами (x, y) в мишень
Здравствуйте, помогите пожалуйста в с++ создать алгоритм для определения попадания точки с...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru