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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.10.2009, 09:59   #1
satanclaus
Пользователь
 
Регистрация: 05.10.2009
Сообщений: 15
По умолчанию Delphi. Нарисовать фигуру которая двигаеться по линии

Помогите написать програму в Delphi . Нужно нарисовать треугольник с вписаним и описаним в него кругом. Далее нарисовать линию(просто задать координати начала и конца). треугольник одной из своих вершин лежит на начале линии нужно по нажатию кнопки сделать чтоб он вместе с вписаним кругом двигался до конца линии. Треугольник и круг я уже нарисовал, как его дигать по линии. Треугольник рисуеться по нажатию кнопки. Рисуеться в пеинтбоксе.
satanclaus вне форума Ответить с цитированием
Старый 05.10.2009, 10:54   #2
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

Хмм..а наработки?..
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 05.10.2009, 11:01   #3
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

ну дык по циклу
inc(x)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 05.10.2009, 11:09   #4
Вавел из ГМТУ
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 896
По умолчанию

Мда, один ответ лучше другого.....

Я представляю себе это вот так:

Нужно написать процедуру, которая будет отрисовывать треугольник и круги (далее по тексту просто фигура). Примерно её описание выглядит так:

Код:
Procedure PrintObject(Pole : TImage; x, y : integer);
Где x и y это координаты точки, которая должна быть связанна с линией, по которой эта фигура должна перемещаться.
Эта точка обычно называется "точка привязки".

И собственно рисовать фигуру надо относительно этой точки, тобишь "точка привязки" - начало координат фигуры.
А для того чтоб описать траекторию, по которой двигается фигура, нужно будет составить уравнение вида y(x). Гугли по маске "Уравнение линии через две точки".

Здорово если ктото понял, что я тут написал....
Вавел из ГМТУ вне форума Ответить с цитированием
Старый 05.10.2009, 11:23   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
на начале линии нужно по нажатию кнопки сделать чтоб он вместе с вписаним кругом двигался до конца линии.
линия прямая или сплайн?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.10.2009, 11:57   #6
Lokuson
 
Аватар для Lokuson
 
Регистрация: 08.12.2008
Сообщений: 7
По умолчанию

Если стукнешься - помогу 2552343
Я бы этот мир перекомпилил....
Lokuson вне форума Ответить с цитированием
Старый 05.10.2009, 22:48   #7
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Задачу можно решить по разному.Можно взять (создать сначала в граф-редакторе) готовый рисунок и уже программно работать с ним. Интересней все делать программно, т.е. создать рисунок в программе , а затем организовать его перемещение.
Сначала вспомним немного геометрию.
Смотрим рисунок ниже.
Рисунок с вписанной и описывающей треугольник окружностями может быть разным в зависимости от типа треугольника (произвольный-рис.1;равнобедренный - рис.2; произвольный прямоугольный - рис.3; равнобедренный прямоугольный - рис.4).
В каждом случае нужно задавать какие то начальные значения для построения чертежа.Самый простой - последний случай - рис.4.
Здесь достаточно задать всего лишь радиус одной из окружности и координаты ее центра.Третий параметр (углы треугольника) истекают автоматически из условия равнобедренноготреугольника - 45 град.

Все нужные значения для построения видно из чертежа и вычисляются следующим способом (исходя из радиуса большой окружности и координат ее центра R, x, y:
Код:
Определяем катеты треугольника :
  a = b = 2R * sin u ;

Координаты вершин треугольника :
  x1 = x – b/2 ;  y1 = y – a/2 ;
  x2 = x1 ;  y2 = y1 + a ;
  x3 = x2 + b ;  y3 = y2 ;

Радиус  и координаты  центра  вписанной (малой) окружности :  
  R1 = b – R ;
  xR = x3 – R ;  yR = y1 + R ;

Координаты прямоугольной области рисования описывающей (большой) окружности :
 xE1  = x – R ;  yE1 = y – R ;
 xE2 = x + R ;  yE2 = y + R ;

Координаты прямоугольной области рисования малой окружности :
 xM1  = xR – R1 ;  yM1 = yR – R1 ;
 xM2 = xR + R1 ;  yM2 = yR + R1 ;
Реализующая программа во вложении. Там все довольно просто - математические вычисления необходимых координат и простенькая графика.
Вложения
Тип файла: rar Geometr.rar (3.5 Кб, 53 просмотров)
И не сомневайся даже ... отдых - кайф, работа - лажа!

Последний раз редактировалось DeKot; 05.10.2009 в 22:53.
DeKot вне форума Ответить с цитированием
Старый 11.10.2009, 14:21   #8
satanclaus
Пользователь
 
Регистрация: 05.10.2009
Сообщений: 15
По умолчанию

вот мой код для рисования фигуры, как теперь ее продвинуть от начала до конца прямой линии?
Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 xa,ya,xb,yb,xc,yc,kinx,kiny:Integer;
a,b,c:Double;
Lc,Lb:Double;
S,p,r:Double;
cx,cy,bx,by:Double;
K1,K2:Double;
x,y:Double;

begin



xa:=strtoint(edit1.Text); ya:=strtoint(edit4.Text);
xb:=strtoint(edit5.Text); yb:=strtoint(edit6.Text);
xc:=strtoint(edit7.Text); yc:=strtoint(edit8.Text);
kinx:=strtoint(edit2.Text); kiny:=strtoint(edit3.Text);
a:=sqrt((xb-xc)*(xb-xc)+(yb-yc)*(yb-yc));
b:=sqrt((xa-xc)*(xa-xc)+(ya-yc)*(ya-yc));
c:=sqrt((xa-xb)*(xa-xb)+(ya-yb)*(ya-yb));

p:=(a+b+c)/2;
S:=sqrt(p*(p-a)*(p-b)*(p-c));
r:=S/p;
 
Lb:=a/c;
Lc:=a/b;
 
cx:=(xb+Lc*xa)/(Lc+1);
cy:=(yb+Lc*ya)/(Lc+1);
 
bx:=(xc+Lb*xa)/(1+Lb);
by:=(yc+Lb*ya)/(1+Lb);
 
K1:=(cy-yc)/(cx-xc);
K2:=(by-yb)/(bx-xb);
 
x:=(K1*xc-K2*xb+(yb-yc))/(K1-K2);
y:=K1*(x-xc)+yc;

Paintbox1.Canvas.MoveTo(xa,ya);
Paintbox1.Canvas.LineTo(kinx,kiny);
Paintbox1.Canvas.MoveTo(xa,ya);
Paintbox1.Canvas.LineTo(xb,yb);
Paintbox1.Canvas.LineTo(xc,yc);
Paintbox1.Canvas.LineTo(xa,ya);

 
xa:=Trunc(x-r);
ya:=trunc(y-r);
xb:=trunc(x+r);
yb:=trunc(y+r);
 
Paintbox1.Canvas.Ellipse(xa,ya,xb,yb);

end;

Последний раз редактировалось Stilet; 12.10.2009 в 09:42.
satanclaus вне форума Ответить с цитированием
Старый 11.10.2009, 14:29   #9
ОДИНОЧЕСТВО В СЕТИ
Любопытная Вредина
Участник клуба
 
Аватар для ОДИНОЧЕСТВО В СЕТИ
 
Регистрация: 19.06.2009
Сообщений: 1,285
По умолчанию

про метод базовой точки при построении графических изображений почитай! и будет тебе счастье!
Дурь - это особая форма материи, которая не возникает ниоткуда и не исчезает никуда, а лишь переходит из одной головы в другую.
ОДИНОЧЕСТВО В СЕТИ вне форума Ответить с цитированием
Старый 11.10.2009, 18:36   #10
satanclaus
Пользователь
 
Регистрация: 05.10.2009
Сообщений: 15
По умолчанию

Цитата:
Сообщение от ОДИНОЧЕСТВО В СЕТИ Посмотреть сообщение
про метод базовой точки при построении графических изображений почитай! и будет тебе счастье!
не могу найти, помогите плиз а то завтра здать надо
satanclaus вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нарисовать заданную фигуру wdnk Общие вопросы C/C++ 6 29.05.2009 00:21
Qbasic. Помогите пожалуйста нарисовать фигуру. L@CO$TE Помощь студентам 1 26.04.2009 12:28
с++. Програма которая проверяет, входят ли введенные координаты в нашу фигуру Alex1991 Помощь студентам 2 04.03.2009 21:44
начало второй нарисованной линии должно передвинутся к началу первой. Delphi maddamo4ka Помощь студентам 7 08.12.2008 19:19
Delphi. Как нарисовать в Delphi два движущиеся шара с определенной скоростью? redred Общие вопросы Delphi 10 11.12.2007 10:43