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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2008, 01:24   #11
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
как по другому "сказать" делфи мол проведи перпендикуляры (!!!!) с середины отрезков и на пересечении будет центр(????) и нарисуй окружность.
Середина отрезка имеет координаты X1+(X2-X1)/2 и Y1+(Y2-Y1)/2, где X1,Y1 и X2,Y2 координаты двух заданных точек.
Это, надеюсь, несложно?
Уравнение прямой в общем виде - Y=KX, так?
Уравнение прямой, проходящей через заданную точку, надеюсь, тоже найдете (я-то это уже больше 40 лет назад проходил, каюсь, не помню навскидку).
Уравнение перпендикулярной к этой прямой найдете?
Приравнять правые части двух линейных уравнений перпендикуляров сможете? А найти неизвестное, то есть координаты центра окружности?
А нарисовать окружность - выдам страшную тайну - CIRCLE...
Прямо детский сад какой-то, ей-богу...
Цитата:
я не пойму куда это все вставить!
(Молчать, господа гусары!!!)
Ну, например, в обработчик Button1.OnClick...
И тогда по нажатию этой самой Button1 у вас произойдут все вычисления и нарисуется кружок...

Последний раз редактировалось mihali4; 11.04.2008 в 01:28.
mihali4 вне форума Ответить с цитированием
Старый 11.04.2008, 01:34   #12
ксона
Пользователь
 
Регистрация: 10.04.2008
Сообщений: 15
По умолчанию

(я ж говорю-формулы вывела)спасибо, "детский сад" пошёл делать. просто у меня получилось очень много формул. Вы знаете если б я всё знала, я б наверно детские вопросы не задавала. Я только учусь.
может и я через ...надцать лет буду очень много знать.

Последний раз редактировалось ксона; 11.04.2008 в 01:41.
ксона вне форума Ответить с цитированием
Старый 11.04.2008, 02:01   #13
ксона
Пользователь
 
Регистрация: 10.04.2008
Сообщений: 15
По умолчанию

хорошо,нарисую,я положила анимацию на форму при помощи панели,сверху на панель editы. когда я выводила текст(простой) то он у меня исчезал,появлялся,исчезал и т.д.мне все время нажимать кнопку, или через цикл с наращиванием?тогда будет мелькать.или положить другой вид анимации.
ксона вне форума Ответить с цитированием
Старый 11.04.2008, 02:09   #14
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от ксона Посмотреть сообщение
хорошо,нарисую,я положила анимацию на форму при помощи панели,сверху на панель editы. когда я выводила текст(простой) то он у меня исчезал,появлялся,исчезал и т.д.мне все время нажимать кнопку, или через цикл с наращиванием?тогда будет мелькать.или положить другой вид анимации.
Вот вам готовый пример, выкинете лишнее:
Код:
procedure TForm2.Button1Click(Sender: TObject);
var Hfont: Thandle;
    logfont:TLogFont;
    font: Thandle;
    count: integer;
begin
LogFont.lfheight:=30;
logfont.lfwidth:=20;
logfont.lfweight:=900;
LogFont.lfEscapement:=200;
LogFont.lfStrikeOut:=0;
logfont.lfcharset:=ANSI_CHARSET;
logfont.lfoutprecision:=out_tt_precis;
logfont.lfquality:=draft_quality;
logfont.lfpitchandfamily:=FF_ROMAN;
font:=createfontindirect(logfont);
Selectobject(Form2.canvas.handle,font);
SetTextColor(Form2.canvas.handle,rgb(0,0,200));
SetBKmode(Form2.canvas.handle,transparent);
for count:=1 to 10 do
begin
canvas.textout(Random(form2.width),Random(form2.height),'Rotated');
SetTextColor(form2.canvas.handle,rgb(Random(255),Random(255),Random(255)));
end;
deleteobject(font);
end;
mihali4 вне форума Ответить с цитированием
Старый 11.04.2008, 02:28   #15
ксона
Пользователь
 
Регистрация: 10.04.2008
Сообщений: 15
По умолчанию

а ещё вопрос на засыпку.как заставить вращаться окружность(не двигаться-вращаться), нарисованную на canvas?(закрашенную) и чтоб было видно, что она вращается(типа шарика)
ксона вне форума Ответить с цитированием
Старый 11.04.2008, 08:15   #16
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Сообщение от ксона Посмотреть сообщение
а ещё вопрос на засыпку.как заставить вращаться окружность(не двигаться-вращаться), нарисованную на canvas?(закрашенную) и чтоб было видно, что она вращается(типа шарика)
Заставить вращаться очень просто - нужно последовательно рисовать элипсы - проекции окружности в разные моменты времени.

По поводу окружности по трем точкам. Все надеялся, что увижу решение ТС, но видно не судьба. Вот рабочий пример. Никаких TEdit. Все точки двигаются мышкой.

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    P : array [1..3] of TPoint;
    CPoint : integer;
    Delta : TPoint;
    X0 : TPoint;
    R : integer;
    procedure ReCalcCircle;
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
   P[1].X := 100; P[1].Y := 100;
   P[2].X := 150; P[2].Y := 100;
   P[3].X := 125; P[3].Y := 200;
   ReCalcCircle;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
   if R > 0 then begin
      Canvas.Brush.Color := clBtnFace;
      Canvas.Pen.Color   := clBlue;
      Canvas.Ellipse(X0.X-R, X0.Y-R, X0.X+R, X0.Y+R);
   end;

   Canvas.Brush.Color := clGreen;
   Canvas.FillRect(rect(P[1].X-3, P[1].Y-3, P[1].X+3, P[1].Y+3));
   Canvas.FillRect(rect(P[2].X-3, P[2].Y-3, P[2].X+3, P[2].Y+3));
   Canvas.FillRect(rect(P[3].X-3, P[3].Y-3, P[3].X+3, P[3].Y+3));
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
   if      (X >= P[1].X-5) and (Y >= P[1].Y-5) and (X <= P[1].X+5) and (Y <= P[1].Y+5) then CPoint := 1
   else if (X >= P[2].X-5) and (Y >= P[2].Y-5) and (X <= P[2].X+5) and (Y <= P[2].Y+5) then CPoint := 2
   else if (X >= P[3].X-5) and (Y >= P[3].Y-5) and (X <= P[3].X+5) and (Y <= P[3].Y+5) then CPoint := 3
   else CPoint := -1;
   Delta.Y := P[CPoint].X - X;
   Delta.Y := P[CPoint].Y - Y;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
   if CPoint = -1 then exit;
   P[CPoint].X := X + Delta.X;
   P[CPoint].Y := Y + Delta.Y;
   ReCalcCircle;
   refresh;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
   CPoint := -1;
end;

procedure TForm1.ReCalcCircle;
var A, B, x, y:double;
    k0, k1, k2, m0, m1, m2:double;
begin
   R := -1;
   k0 := sqr(P[1].X)-sqr(P[2].X) + sqr(P[1].Y)-sqr(P[2].Y);
   k1 := 2*(P[1].Y-P[2].Y);
   k2 := 2*(P[1].X-P[2].X);
   m0 := sqr(P[1].X)-sqr(P[3].X) + sqr(P[1].Y)-sqr(P[3].Y);
   m1 := 2*(P[1].Y-P[3].Y);
   m2 := 2*(P[1].X-P[3].X);
   A := (k2*m0 - k0*m2);
   B := (k2*m1 - k1*m2);
   if B = 0 then exit;
   y := A / B;
   X0.Y := trunc(y);
   if abs(m2) > 0.01 then x := (m0 - y * m1) / m2
   else
      if abs(k2) > 0.01 then x := (k0 - y * k1) / k2
      else exit;
   X0.X := trunc(x);

   R := trunc(sqrt(sqr(P[1].X-x) + sqr(P[1].Y-y)))
end;

end.
Координаты центра и радиус получается решением системы из трех уравнений

(x-a)^2 + (y-b)^2 = R^2 для трех точек
alexBlack вне форума Ответить с цитированием
Старый 12.12.2009, 17:14   #17
NIQK
Пользователь
 
Регистрация: 11.12.2009
Сообщений: 10
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
А нарисовать окружность - выдам страшную тайну - CIRCLE...
Прямо детский сад какой-то, ей-богу...
ну ну, обыскался я этого Circle. Делфовский хелпер молчит. А сама програма ругается, что не знает такого.
Единственное, что нашел - это рисованием Ellipse, это я и так знал.

Последний раз редактировалось NIQK; 12.12.2009 в 17:21.
NIQK вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построение кривых Серпинского и Гильберта Delphi KEnt Помощь студентам 3 07.10.2017 11:42
Движение фигуры по окружности &RiU Помощь студентам 3 31.10.2009 20:39
ассемблер. Написать функцию, вычисляющую по заданным точкам а,b,c площадь треугольника abс. qimbo Помощь студентам 5 05.01.2008 13:54
Движение по окружности Mickle Общие вопросы Delphi 3 13.04.2007 16:24
Анимация. Движение по окружности. Albenous Общие вопросы Delphi 1 11.04.2007 14:57