Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2010, 20:44   #1
Macmeprag
Пользователь
 
Аватар для Macmeprag
 
Регистрация: 07.10.2010
Сообщений: 43
По умолчанию

Помогите пожалуйста, пишем на пару с другом футбол на бумаге. Застряли почти в самом начале, подскажите пожалуйста как в желаемую точку перенести начало координат?

мм, как помогли то, а)
хотя бы как стереть прямую подскажите плз
Вложения
Тип файла: rar Footbal on paper.rar (685.9 Кб, 11 просмотров)

Последний раз редактировалось Stilet; 07.12.2010 в 20:52.
Macmeprag вне форума Ответить с цитированием
Старый 07.12.2010, 20:31   #2
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
хотя бы как стереть прямую подскажите плз
нарисовать ее же цветом фона
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 07.12.2010, 20:53   #3
Macmeprag
Пользователь
 
Аватар для Macmeprag
 
Регистрация: 07.10.2010
Сообщений: 43
По умолчанию

Спасибо, а вот еще такой момент:
Я сравниваю расстояние по точкам которое через корень считается и расстояние либо диагонали клетки либо стороны клетки чтобы в зависимости от этого выводить линии. Собсна вопрос: можно как-нибудь это делать через координаты? Чтобы можно было попав в радиус ну например 5 пикселей от нужной точки прямая проводилась? А то точное тыканье это не очень)
Код:
rasst:=sqrt(2)*intrv;
  d:=sqrt(sqr(this.x-X)+sqr(this.y-Y));
  if (((d = rasst) and (abs(X-this.x)=intrv) and (abs(Y-this.y)=intrv))
  or ((d = intrv) and ((abs(X-this.x)=intrv) or (abs(Y-this.y)=intrv)))) then begin
     ...
  end;
Macmeprag вне форума Ответить с цитированием
Старый 07.12.2010, 20:57   #4
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

x1,y1-координаты тычка
x,y - координаты точки

Код:
if (abs(x-x1)=5) or (abs(y1-y)=5) then {рисуем}
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 07.12.2010, 22:30   #5
Macmeprag
Пользователь
 
Аватар для Macmeprag
 
Регистрация: 07.10.2010
Сообщений: 43
По умолчанию

а вот как норм обрабатывать клик?)
Код:
rasst:=sqrt(2)*intrv;
  d:=sqrt(sqr(this.x-Mouse.CursorPos.X)+sqr(this.y-Mouse.CursorPos.Y));
  if (((d = rasst) and (abs(Mouse.CursorPos.X-this.x)=intrv)
  and (abs(Mouse.CursorPos.Y-this.y)=intrv))

  or ((d = intrv) and ((abs(Mouse.CursorPos.X-this.x)=intrv)
  or (abs(Mouse.CursorPos.Y-this.y)=intrv)))) then begin

    pole.canvas.LineTo(Mouse.CursorPos.X,Mouse.CursorPos.Y);
    pole.canvas.MoveTo(Mouse.CursorPos.X,Mouse.CursorPos.Y);
    this.x:=Mouse.CursorPos.X; this.y:=Mouse.CursorPos.Y;
    pole.canvas.Ellipse(this.x-2,this.y-2,this.x+2,this.y+2);
    inc(hod)

    //ну и тут идут проверки на забитый не забитый гол штангу, пересечение и тп)
типа так?)
где Mouse : TMouse;
а событие OnClick

Хелп плиз

Тоже интересует, плюс еще такой вопрос появился: У меня есть точка из которой рисую (х,у) и точное расстояние то точки в которую можно рисовать, но нет её координат, а есть координаты рядом с ней, когда мышкой вожу, так вот как провести линию на нужное расстояние в нужную точку но по приближенным координатам, приближение где-то +-5

Последний раз редактировалось Stilet; 10.12.2010 в 09:22.
Macmeprag вне форума Ответить с цитированием
Старый 10.12.2010, 01:40   #6
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

1.Посмотрите режимы рисования, например в режиме pmNotXor - повторное рисование этой же линии приведет к ее исчезновению. Фигнюшку с "резиновыми" линиями, фигурами я так делал.
2. Высчитывайте нужную координату и
Код:
 if ((x+5)>=Xn and (x-5)<=Xn)and((y+5)>=yn and (y-5)<=yn)) then LineTo(Xn,Yn);
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Старый 10.12.2010, 11:27   #7
Macmeprag
Пользователь
 
Аватар для Macmeprag
 
Регистрация: 07.10.2010
Сообщений: 43
По умолчанию

alex_fcsm
попробовал так как вы советуете сделать, не выходит(
Не могли бы вы поподробней объяснить?)
Вот у меня в OnMouseMove по TImage передаются в OnClick координаты (Х,У) а в онклике уже проверяется возможность рисования но по точным координатам..я точно знаю на какие расстояния от текущей точки можно рисовать, из всего 2..так вот как по переданным приближенным разрешить? так как вы написали, не получается(
Macmeprag вне форума Ответить с цитированием
Старый 10.12.2010, 11:29   #8
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Я использовал Paintbox, извиняюсь что не обратил внимания

Код выложите, где не получается
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Старый 10.12.2010, 11:33   #9
Macmeprag
Пользователь
 
Аватар для Macmeprag
 
Регистрация: 07.10.2010
Сообщений: 43
По умолчанию

Код:
procedure TFtbl_Field.PoleClick(Sender: TObject);
var
  d,rasst : real;
  check   : boolean;

  procedure ObrabotkaShtang;
     //ну тут идет обработка штанг, прост еще +100 строк кода)
  end;

begin
  check:=false;
  label5.Font.Color:=rgb(200,0,0);
  label5.Caption:=nelzya;
  rasst:=sqrt(2)*intrv;
  d:=sqrt(sqr(this.x-GX)+sqr(this.y-GY));

  if CheckStroke(GX,GY,d,rasst) then begin

    inc(hod);

    label5.Font.Color:=rgb(0,200,0);
    label5.Caption:=mozhno;

    pole.canvas.LineTo(GX,GY);
    pole.canvas.MoveTo(GX,GY);

    ObrabotkaShtang;

    if check then begin
      if hod=3 then begin
        hod:=0;
        inc(count);
        if count mod 2 = 0 then begin
          pole.Canvas.Pen.Color:=rgb(200,0,0);
          label3.Visible:=true;
          label4.Visible:=false;
        end
        else begin
          pole.Canvas.Pen.Color:=rgb(0,0,200);
          label3.Visible:=false;
          label4.Visible:=true;
        end;
      end;
      exit;
    end;

    this.x:=GX; this.y:=GY;
    //pole.canvas.Ellipse(this.x-2,this.y-2,this.x+2,this.y+2);

    if ((this.x>uRodL.x) and (this.X < uRodR.x)) and (this.y=0)
    and (pole.Canvas.Pen.Color=rgb(200,0,0))
    then ShowMessage('1-й игрок забил гол и победил!!!');

    if ((this.x>uRodL.x) and (this.X < uRodR.x)) and (this.y=0)
    and (pole.Canvas.Pen.Color=rgb(0,0,200))
    then ShowMessage('2-й игрок забил автогол и проиграл!!!');

    if ((this.x>dRodL.x) and (this.x<dRodR.x)) and (this.y=30*intrv)
    and (pole.Canvas.Pen.Color=rgb(0,0,200))
    then ShowMessage('2-й игрок забил гол и победил!!!');

    if ((this.x>dRodL.x) and (this.x<dRodR.x)) and (this.y=30*intrv)
    and (pole.Canvas.Pen.Color=rgb(200,0,0))
    then ShowMessage('1-й игрок забил автогол и проиграл!!!');

    if hod=3 then begin
      hod:=0;
      inc(count);
      if count mod 2 = 0 then begin
        pole.Canvas.Pen.Color:=rgb(200,0,0);
        label3.Visible:=true;
        label4.Visible:=false;
      end
      else begin
        pole.Canvas.Pen.Color:=rgb(0,0,200);
        label3.Visible:=false;
        label4.Visible:=true;
      end;
    end;

  end;

end;

procedure TFtbl_Field.PoleMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  d,rasst : real;
  check   : boolean;
begin
  GX := X; GY := Y;

  rasst:=sqrt(2)*intrv;
  d:=sqrt(sqr(this.x-GX)+sqr(this.y-GY));

  if checkStroke(GX,GY,d,rasst) then begin
    label5.Font.Color:=rgb(0,200,0);
    label5.Caption:=mozhno;
  end
  else begin
    label5.Font.Color:=rgb(200,0,0);
    label5.Caption:=nelzya;
  end;
я убрал мою попытку использовать приближенные, потому что не работала прога вообще, ну т.е. рисование)
Macmeprag вне форума Ответить с цитированием
Старый 10.12.2010, 11:44   #10
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Похоже я неправильно понял:
Дано: предыдущая точка и расстояние
Найти: координаты точки, в которую нужно отложить расстояние

Множество этих точек - окружность, но как вы определяете,что это именно вы находитесь рядом с нужной точкой? Откуда допуск +- 2?
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с рисованием на canvas`e Timage (Delphi) Dalagardi Помощь студентам 9 25.03.2010 20:55
delphi canvas Neymexa Помощь студентам 5 06.01.2010 21:35
Canvas.CopyRect DELPHI Что и как... 08ekhiv1 Помощь студентам 1 09.06.2009 08:25
Delphi Canvas карандаш wayder Помощь студентам 3 28.05.2009 16:57