Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];

Вниз

Рисование стрелок под любым углом   Найти похожие ветки 

 
Stas_on ©   (2005-11-28 13:47) [0]

Нужно сделать при нажатии на Image рисование стрелки (от точки нажатия до того места где сейчас мышь(OnMouseMove)).
Стрелка сгодится любая, но чтоб было похоже.
Место начала стрелки (x0,y0), конец (x,y).
Помогите пожалуйста кодом......

P.S. Если загруженно изображение, то при перемещении указателя надобы сделать так, чтобы не очень мигало. Исп. других компонент не желательно.

P.S.S. В принципе вопрос на математику.


 
psa247 ©   (2005-11-28 14:10) [1]

Смотри...
1) Запоминаешь позицию Х1 и У1 основания стрелки
2) Получаешь позицию Х2 и У2 вершины стрелки
3) Рисуешь прямую
4) Вычисляешь угол этой стрелки (относительно оси ОХ)
5) В зависимости от угла (от четверти) и длины ушей вычисляешь точки для "ушек" стрелки
6) Рисуешь их
все просто... сплошная математика.


 
kami ©   (2005-11-28 14:29) [2]

В общем, "черепашья графика" - кажется, это так называется.


 
stas_on ©   (2005-11-30 18:41) [3]

Помогите пожалуйста кодом......


> 4) Вычисляешь угол этой стрелки (относительно оси ОХ)
> 5) В зависимости от угла (от четверти) и длины ушей вычисляешь
> точки для "ушек" стрелки
>


 
stas_on ©   (2005-12-03 21:43) [4]

Кто - нибудь помогите новичку.
Очень нужно сделать рисование стрелок


 
Virgo_Style ©   (2005-12-03 21:58) [5]

Геометрия рулит


 
Джо ©   (2005-12-03 22:41) [6]

Если не хочешь вспоминать геометрию, можешь воспользоваться майкрософтовской библиотекой GDI+, там этих стрелок - хоть завались. Если нужен пример, могу показать.


 
Zeqfreed ©   (2005-12-03 22:50) [7]

stas_on ©   (30.11.05 18:41) [3]

var
 Form1: TForm1;
 x1, y1 : Integer;
 downed : Boolean = false;


...

procedure DrawArrowTip(const Canvas : TCanvas; const angle : Single; const Position : TPoint);
const
_p1 : TPoint = (X: 5; Y: 5);
_p2 : TPoint = (X: 5; Y: -5);
var
p1, p2 : TPoint;
begin
p1.X := Round(_p1.X * cos(angle) - _p1.Y * sin(angle));
p1.Y := Round(_p1.X * sin(angle) + _p1.Y * cos(angle));

p2.X := Round(_p2.X * cos(angle) - _p2.Y * sin(angle));
p2.Y := Round(_p2.X * sin(angle) + _p2.Y * cos(angle));

Canvas.MoveTo(Position.X, Position.Y);
Canvas.LineTo(Position.X + p1.X, Position.Y + p1.Y);
Canvas.MoveTo(Position.X, Position.Y);
Canvas.LineTo(Position.X + p2.X, Position.Y + p2.Y);
end;

procedure TForm1.pbMouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
downed := true;
x1 := X;
y1 := Y;
end;

procedure TForm1.pbMouseUp(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
var
vx, vy : Integer;
a,cosa : Single;
begin
if downed then begin
 pb.Canvas.MoveTo(x1, y1);
 pb.Canvas.LineTo(X, Y);

 vx := X - x1;
 vy := Y - y1;
 if (vy <> 0) or (vx <> 0) then begin
  cosa := (vx / ( sqrt(sqr(vx) + sqr(vy)) ));

  if ((Sign(vx) = -1) and ((Sign(vy) = -1))) then
   a := Pi - arccos(cosa)
  else if ((Sign(vx) = 1) and ((Sign(vy) = -1))) then
   a := arcsin(cosa) + Pi/2
  else
   a := arccos(cosa) + Pi;

  DrawArrowTip(pb.Canvas, a, Point(X, Y));
 end;
end;

downed := false;
end;


Доработаешь, по желанию, сам :)
p.s. Че-то я там с определением угла перемудрил, а что не могу никак понять :(



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.014 c
2-1133345383
Ильичев С.А.
2005-11-30 13:09
2005.12.18
ActionManager


2-1133351243
linox
2005-11-30 14:47
2005.12.18
Срочно!!!! Нужно данные с Excell перекинуть на шаблоны в Word


14-1132835209
ArtemESC
2005-11-24 15:26
2005.12.18
Потерял статью...


2-1133519302
kot1110
2005-12-02 13:28
2005.12.18
главная форма


14-1132841824
stone
2005-11-24 17:17
2005.12.18
Супердевайс :))





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский