Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вращение геометрической фигуры 
:(
    Опции темы
Жанна23
Дата 18.3.2012, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 12.5.2011

Репутация: нет
Всего: нет



Здравствуйте!
Подскажите, почему оси координат исчезают, когда начинаю вращать параллелепипед?
И как сделать, чтобы параллелепипед вращался не где-то в стороне, а именно вокруг центра координат
Код


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    TrackBar1: TTrackBar;
    Image1: TImage;
    Button1: TButton;
    procedure TrackBar1Change(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
   x,y,xn,yn:array[1..4] of integer;
  cosa,sina:double;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
x,y: Real;
    x0, y0: Integer;
    m: Integer;
    i: Integer;
    n: Integer;
begin
x0 := Image1.Width div 2; // центр координатной плоскости по х оси
  y0 := Image1.Height div 2; // центр координатной плоскости по у оси
  m := 25;      // масштаб

  // координатная плоскость
  Image1.Canvas.MoveTo(0, y0);
  Image1.Canvas.LineTo(ClientWidth, y0);
  Image1.Canvas.MoveTo(x0, 0);
  Image1.Canvas.LineTo(x0, ClientHeight);

  x := -7; // стартовое значение функции
  n := Abs(Round(x)); // конечное значение функции
  // шкалирование осей
  for i := Round(x) to n do
    begin
      Image1.Canvas.MoveTo(x0+i*m, y0-5);
      Image1.Canvas.LineTo(x0+i*m, y0-(-5));
      Image1.Canvas.TextOut(x0+i*m, y0+10, IntToStr(i));
      Image1.Canvas.MoveTo(x0+5, y0-m*i);
      Image1.Canvas.LineTo(x0-5, y0-m*i);
      Image1.Canvas.TextOut(x0-15, y0+i*m, IntToStr(-i));
    end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
x[1]:=-50 ;
y[1]:=-20 ;

x[2]:=30 ;
y[2]:=-20 ;

x[3]:=50 ;
y[3]:=20 ;

x[4]:=-30 ;
y[4]:=20 ;

end;

procedure TForm1.TrackBar1Change(Sender: TObject);
var
i:integer;

begin
label1.Caption:=Inttostr(TrackBar1.Position);
Image1.Canvas.FillRect(rect(0,0,Width,height));

cosa:=cos(2*pi*trackBar1.Position/360);
sina:=sin(2*pi*trackBar1.Position/360);
for i:=1 to 4 do
begin
    Canvas.MoveTo(200+xn[i],200+yn[i]);
    Image1.Canvas.lineTo(200+xn[i],200+yn[i]);

    xn[i]:=round((x[i]+100)*cosa-(y[i]+100)*sina);
    yn[i]:=round((x[i]+100)*sina+(y[i]+100)*cosa);

end;
end;

end.

PM MAIL   Вверх
LegionnaireFH
Дата 20.3.2012, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 20.3.2012

Репутация: нет
Всего: нет



Здравствуйте.
Оси координат исчезают при вращении параллелепипеда из-за параметров в rect():
Код

procedure TForm1.TrackBar1Change(Sender: TObject);
Image1.Canvas.FillRect(rect(0,0,Width,height)); 

Смещение параллелепипеда по координате "x" можно добиться изменением следующего параметра (пример: 200+xn[i] на 240+xn[i]):
Код

procedure TForm1.TrackBar1Change(Sender: TObject);
Image1.Canvas.lineTo(240+xn[i],200+yn[i]);


PM   Вверх
Жанна23
Дата 20.3.2012, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 12.5.2011

Репутация: нет
Всего: нет



Спасибо за помощь! Очень вам благодарна!!!
Как вам удаётся находить чужие ошибки? Здесь есть какой-то секрет? Неужели это просто хорошие знания Delphi ?
PM MAIL   Вверх
LegionnaireFH
Дата 20.3.2012, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 20.3.2012

Репутация: нет
Всего: нет



Я сам начинающий программист, поэтому о хороших знаниях Delphi здесь не может идти и речи, к тому же эта программа довольно проста, можно сказать, азы программирования. А секретов тоже никаких нет, работа программы зависит (разумеется) от ее исходного кода.
PM   Вверх
Жанна23
Дата 20.3.2012, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 12.5.2011

Репутация: нет
Всего: нет



Здоровья вам и удачи во всем!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0673 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.