Другие языки программирования и технологии
Как двигать изображение по кривой прямой
Пишу на Delphi. Хочу создать простую игру. Мне нужно знать как правильно определить путь к месту нажатия мишкой(координаты нажатия я знаю) Всмысле изображение должно двигаться по кривой в точку нажатия мишки. Если кто знает способ работы LineTo то он мне тоже подойдет. Пробивал работать с векторами но я не могу правильно определить вектор направления.если извесна точка начала и конца...
Ну во-первых: что за «мишка» − косолапый что-ли?
Во-вторых: начальных знаний математики и декартовой системы координат должно быть достаточно:
Пусть требуется нарисовать отрезок от точки A(Xa, Ya) до точки B(Xb, Yb).
Нужно определиться с частными случаями, когда отрезок совпадает с осью X или Y:
if (Xa = Xb) and (Ya = Yb) then { рисовать ничего не нужно! }
else if Xa = Xb then { движемся вдоль оси Y } MoveY(Xa, Ya, Yb)
else if Ya = Yb then { движемся вдоль оси X } MoveX(Xa, Xb, Ya)
else { общий случай - движемся от одной точки к другой } MoveXY(Xa, Ya, Xb, Yb);
С частными случаями должно быть просто:
procedure MoveY(X, Ya, Yb : Integer);
var Y : Integer;
begin
if Yb > Ya then for N := Ya to Yb do { собственно новая точка X,Y движется вниз }
else N := Ya downto Yb do { новая точка X,Y движется вверх }
end;
В случае для MoveX действуем аналогичным способом.
Общий случай разрабатываем по примерно такому алгоритму:
Выясняем по какой оси нужно больше сместиться и какой нужен шаг для смещения по другой оси на единицу шага по основной
dX := Xb - Xa;
dY := Yb - Ya;
if dX > 0 then kX := +1 else kX := -1;
if dY > 0 then kY := +1 else kY := -1;
if Abs(dX) = Abs(dY) then { смещение по оси Х равно смещению по оси Y } Steps := Abs(dX)
else if Abs(dX) > Abs(dY) then { смещение по оси Х больше } begin Steps := Abs(dX); kY := kY / Abs(dX); end
else { смещение по оси Y больше } begin Steps := Abs(dY); kX := kX / Abs(dY); end;
Теперь просто пройдём все точки по линии
for N := 0 to Steps do begin X := Round(Xa + N * kX); Y := Round(Ya + N * kY); { новая точка X,Y получена } end;
Во-вторых: начальных знаний математики и декартовой системы координат должно быть достаточно:
Пусть требуется нарисовать отрезок от точки A(Xa, Ya) до точки B(Xb, Yb).
Нужно определиться с частными случаями, когда отрезок совпадает с осью X или Y:
if (Xa = Xb) and (Ya = Yb) then { рисовать ничего не нужно! }
else if Xa = Xb then { движемся вдоль оси Y } MoveY(Xa, Ya, Yb)
else if Ya = Yb then { движемся вдоль оси X } MoveX(Xa, Xb, Ya)
else { общий случай - движемся от одной точки к другой } MoveXY(Xa, Ya, Xb, Yb);
С частными случаями должно быть просто:
procedure MoveY(X, Ya, Yb : Integer);
var Y : Integer;
begin
if Yb > Ya then for N := Ya to Yb do { собственно новая точка X,Y движется вниз }
else N := Ya downto Yb do { новая точка X,Y движется вверх }
end;
В случае для MoveX действуем аналогичным способом.
Общий случай разрабатываем по примерно такому алгоритму:
Выясняем по какой оси нужно больше сместиться и какой нужен шаг для смещения по другой оси на единицу шага по основной
dX := Xb - Xa;
dY := Yb - Ya;
if dX > 0 then kX := +1 else kX := -1;
if dY > 0 then kY := +1 else kY := -1;
if Abs(dX) = Abs(dY) then { смещение по оси Х равно смещению по оси Y } Steps := Abs(dX)
else if Abs(dX) > Abs(dY) then { смещение по оси Х больше } begin Steps := Abs(dX); kY := kY / Abs(dX); end
else { смещение по оси Y больше } begin Steps := Abs(dY); kX := kX / Abs(dY); end;
Теперь просто пройдём все точки по линии
for N := 0 to Steps do begin X := Round(Xa + N * kX); Y := Round(Ya + N * kY); { новая точка X,Y получена } end;
Похожие вопросы
- Нужен исходник Кривой Безье на С# Visual studio
- Знатокам Фотошопа: не ухудшится ли качество изображения, если нарисовать его в Фотошопе вручную?
- Смешивание изображений в фотошопе
- Изображение с прозрачным фоном и заливка фигуры
- При изменении разрешения изображения, объём файла остаётся прежним, т. е. не изменяется (без интерполяции)?
- Как векторное изображение сохранить без потерь в качестве?
- Кто поможет, плиз, перевести изображение текста в ворд (у меня нет файнридера) ?
- Как изображение экрана (прин скрин) распечатать или хотя бы в папку загрузить?
- можно ли сделать скрытый текст на изображении?
- как на сайте сделать изображение на весь экран? Реально на весь экран (любого монитора)?