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

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

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2009, 22:02   #1
lordsyrius
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 24
Вопрос Рисование креста

Здравствуйте. Я тут крест рисую, вот код:
Код:
procedure TKrest.Draw(f: TCanvas);
begin
AllPoints[2].X:=((AllPoints[0].X) + (AllPoints[1].X )) div 2;//находим середину
AllPoints[2].Y:=((AllPoints[0].Y) + (AllPoints[1].Y )) div 2;//отрезка
f.MoveTo(AllPoints[0].X, AllPoints[0].Y);
f.LineTo(AllPoints[1].X, AllPoints[1].Y); 
f.MoveTo(AllPoints[2].X, AllPoints[2].Y);
f.LineTo(AllPoints[3].X, AllPoints[3].Y);
end;
Точки задаются рандомно.Рисуется две линии, но одна начинается из середины другой. Как мне сделать, чтобы одна линия пересекала другую через середину?
lordsyrius вне форума Ответить с цитированием
Старый 21.05.2009, 09:10   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

дело в том, что для креста нельзя все точки задавать случайным образом.
посмотрите пример:
Код:
  DlinaPerekladiny, VysotaKresta : integer;
begin

  DlinaPerekladiny := 150;
  VysotaKresta := 250;
  AllPoints[0].x := 50;   AllPoints[0].y := 300;
  AllPoints[1].x := AllPoints[0].x + DlinaPerekladiny;
  AllPoints[1].y := AllPoints[0].y;
AllPoints[2].X:=((AllPoints[0].X) + (AllPoints[1].X )) div 2;//находим середину
AllPoints[2].Y:= AllPoints[0].Y - (VysotaKresta div 2);//отрезка
  AllPoints[3].x := AllPoints[2].X;
  AllPoints[3].y := AllPoints[2].Y + VysotaKresta;
f.MoveTo(AllPoints[0].X, AllPoints[0].Y);
f.LineTo(AllPoints[1].X, AllPoints[1].Y);
f.MoveTo(AllPoints[2].X, AllPoints[2].Y);
f.LineTo(AllPoints[3].X, AllPoints[3].Y);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.05.2009, 17:49   #3
lordsyrius
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 24
По умолчанию

спасибо, сейчас буду пробовать
lordsyrius вне форума Ответить с цитированием
Старый 21.05.2009, 20:42   #4
lordsyrius
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 24
По умолчанию

я вот так сделал:
Код:
AllPoints[2].X:=((AllPoints[0].X) + (AllPoints[1].X )) div 2;
AllPoints[3].X:=((AllPoints[0].X) + (AllPoints[1].X )) div 2;
f.MoveTo(AllPoints[0].X, AllPoints[0].Y);
f.LineTo(AllPoints[1].X, AllPoints[1].Y);
f.MoveTo(AllPoints[2].X, (AllPoints[0].Y)-50);
f.LineTo(AllPoints[3].X, (AllPoints[1].Y)+50);
так он рандомно выводится. Только теперь новый вопрос, как найти центр креста через четыре точки?
lordsyrius вне форума Ответить с цитированием
Старый 21.05.2009, 23:10   #5
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

А что узнать длинну линий по координатам концов и поделить на два нельзя?
Alter вне форума Ответить с цитированием
Старый 23.05.2009, 17:52   #6
lordsyrius
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 24
По умолчанию

Я вот сделал:
Код:
procedure TFigure.Center;
var
i:integer;
begin
CenterPoint.X:=(AllPoints[0].X+AllPoints[1].X+AllPoints[2].X+AllPoints[3].X)div 4;
CenterPoint.Y:=(AllPoints[0].Y+AllPoints[1].Y+AllPoints[2].Y+AllPoints[3].Y)div 4;
end;
но или в этом проблема, или в моем масштабировании фигуры:
Код:
procedure TFigure.ChangeSize(k: real); 
var
i: integer;
TempPoint: TPoint;
begin
center;
for i:=0 to length(AllPoints) - 1 do
begin
TempPoint.X:=round((AllPoints[i].X-CenterPoint.X)*k+CenterPoint.X);
TempPoint.Y:=round((AllPoints[i].Y-CenterPoint.Y)*k+CenterPoint.Y);
AllPoints[i]:=TempPoint;
end; end;
Масштабирование происходит очень странно: при масштабировании линии совершенно не пропорционально изменяют размер. А иногда вообще, как будто фигура переворачивается.

Помогите разобраться...
lordsyrius вне форума Ответить с цитированием
Старый 23.05.2009, 19:45   #7
lordsyrius
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 24
По умолчанию

срочно нужна помощь...
lordsyrius вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рисование Granus Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 32 30.06.2009 23:23
Рисование Granus Общие вопросы Delphi 2 24.12.2008 07:44
Рисование TriCERATOP Помощь студентам 5 28.11.2008 15:09
Вращение креста Roberto Помощь студентам 5 03.05.2008 14:07
Рисование... HunterMan Win Api 10 30.04.2008 23:46