powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Четверговый кубик
25 сообщений из 51, страница 2 из 3
Четверговый кубик
    #39266375
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но у нас "всегда" не будет получаться!

А если стрельба параллельно кубику? Как?
...
Рейтинг: 0 / 0
Четверговый кубик
    #39266415
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Я уже вроде написал. Как то так

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
uses Math;
Type
  TCoordResult=(Outside, FullInside, StartInside, Cross);

function GetCoordResult(X0, Cx, XLeft, XRight: double; out Tl, Th: double): TCoordResult;
var t1, t2: double;
begin
   if isZero(CX) then begin
     if InRange(X0, XLeft, XRight)
       then result:=FullInside
       else result:=Outside;
  end
  else begin
    t1:=(XLeft-X0)/Cx;
    t2:=(XRight-X0)/Cx;

    Tl:=min(t1, t2);
    Th:=max(t1, t2);

    if TH<0
      then Result:=Outside
    else if Tl<0 then begin
       Tl:=0;
       Result:=StartInside;
    end
    else Result:=Cross
  end;
end;
...
Рейтинг: 0 / 0
Четверговый кубик
    #39266498
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поскольку кубик - суть блок кирпичей то мне недостаточно знать факта Cross.

Мне нужно получить координаты (x,y,z) куда именно попал выстрел чтобы расчитать
damage для кирпичика.
...
Рейтинг: 0 / 0
Четверговый кубик
    #39266522
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если нигде не ошибся:
1. Луч будет пересекать кубик, если существует такое n, при которых следующая система неравенств имеет смысл
x1+xv*n - x <= size/2;
x1+xv*n - x >= -size/2;

y1+yv*n - y <= size/2;
y1+yv*n - y >= -size/2;

z1+zv*n - z <= size/2;
z1+zv*n - z >= -size/2;

2. ну и решение этой системы в чём-то среднем между кодом и псевдокодом :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
nMax = someMaxValue;
nMin = -someMaxValue;

if(xv>0){
	nMax = min(nMax, (size/2 + x - x1)/xv)
	nMin = max(nMin, (-size/2 + x - x1)/xv)
}elseif(xv<0){
	nMin = max(nMin, (size/2 + x - x1)/xv)
	nMax = min(nMax, (-size/2 + x - x1)/xv)
}elseif(x1>size/2 || x1<-size/2){
	nMin = someMaxValue;
	nMax = -someMaxValue;
}

if(yv>0){
	nMax = min(nMax, (size/2 + y - y1)/yv)
	nMin = max(nMin, (-size/2 + y - y1)/yv)
}elseif(yv<0){
	nMin = max(nMin, (size/2 + y - y1)/yv)
	nMax = min(nMax, (-size/2 + y - y1)/yv)
}elseif(y1>size/2 || y1<-size/2){
	nMin = someMaxValue;
	nMax = -someMaxValue;
}

if(zv>0){
	nMax = min(nMax, (size/2 + z - z1)/zv)
	nMin = max(nMin, (-size/2 + z - z1)/zv)
}elseif(zv<0){
	nMin = max(nMin, (size/2 + z - z1)/zv)
	nMax = min(nMax, (-size/2 + z - z1)/zv)
}elseif(z1>size/2 || z1<-size/2){
	nMin = someMaxValue;
	nMax = -someMaxValue;
}

if(nMin<0 && nMax>0) nMin = 0;



3. Если мы каждому кубику присвоим его nMin, то первым пересечённым будет кубик с самым маленьким неотрицательным nMin


P.S. Надеюсь что всё-таки нигде не ошибся.
...
Рейтинг: 0 / 0
Четверговый кубик
    #39266526
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПоскольку кубик - суть блок кирпичей то мне недостаточно знать факта Cross.

Мне нужно получить координаты (x,y,z) куда именно попал выстрел чтобы расчитать
damage для кирпичика.

Код: plaintext
1.
2.
3.
xCross = x1+xv*n;
yCross = y1+yv*n;
zCross = z1+zv*n;



так получаем координаты попадания. Отняв от них координаты кубика, получим точку попадания на кубике.
...
Рейтинг: 0 / 0
Четверговый кубик
    #39266528
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
эх. всё-таки кое-что забыл. Кубик будет пересечён в принципе только тогда, когда nMin<=nMax. То есть, надо не просто искать найменьшее неотрицательное nMin, но и отбрасывать те варианты, где nMin>nMax
...
Рейтинг: 0 / 0
Четверговый кубик
    #39266530
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо.

Другое дело. Начинаю писать юнит-тесты.

Дальше - будет хуже .

Пойдут стрельбы по баллистической траектории.

Надо-ж заюзать пушки мать их так....
...
Рейтинг: 0 / 0
Четверговый кубик
    #39266535
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёрэх. всё-таки кое-что забыл. Кубик будет пересечён в принципе только тогда, когда nMin<=nMax. То есть, надо не просто искать найменьшее неотрицательное nMin, но и отбрасывать те варианты, где nMin>nMax
Давайте как-то уходить от min-max.

У меня куб имеет жесткую ориентацию. Его стороны по сути смотрят на Север-Юг Запад-восток
и есть верх и низ. Или три двоичных числа. Три битика.

От 000 до 111 и по этому коду я буду знать какая грань кубика задета.
...
Рейтинг: 0 / 0
Четверговый кубик
    #39266548
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonСпасибо.

Другое дело. Начинаю писать юнит-тесты.

Дальше - будет хуже .

Пойдут стрельбы по баллистической траектории.

Надо-ж заюзать пушки мать их так....

Без учёта ветра и трения?

Если да, то достаточно видоизменить вторую пару неравенств:
y1+(yv*n - grav*n*n/2) - y <= size/2;
y1+(yv*n - grav*n*n/2) - y >= -size/2;

просто решение этой пары неравенств превратится в квадратное уравнение. Не намного сложнее :)
...
Рейтинг: 0 / 0
Четверговый кубик
    #39266551
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Плииннн... ну давайте пока без ветра. Ну чесслово это не так важно как логика попаданий в кубы.
...
Рейтинг: 0 / 0
Четверговый кубик
    #39266556
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПрограмёрэх. всё-таки кое-что забыл. Кубик будет пересечён в принципе только тогда, когда nMin<=nMax. То есть, надо не просто искать найменьшее неотрицательное nMin, но и отбрасывать те варианты, где nMin>nMax
Давайте как-то уходить от min-max.

У меня куб имеет жесткую ориентацию. Его стороны по сути смотрят на Север-Юг Запад-восток
и есть верх и низ. Или три двоичных числа. Три битика.

От 000 до 111 и по этому коду я буду знать какая грань кубика задета.

От min-max уйти невозможно, потому как у тебя есть ограничения по условию. То есть, это же кубики, а не бесконечные плоскости.

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

Если задача имеет практическое применение (как я понимаю речь о написании игры), то сделай лучше с min-max. ;)
...
Рейтинг: 0 / 0
Четверговый кубик
    #39266569
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я уверен что эта задача решается без функций min-max
...
Рейтинг: 0 / 0
Четверговый кубик
    #39266579
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
type
  TBlockInfo=packed record     A0, AC,  BL,  BH: double; end;
  TCoord=(x, y, z);
  TArBlockInfo=array[TCoord] of TBlockInfo;

function CheckBlock(Info: TArBlockInfo; var T: double): boolean;

  Type
    TCoordResult=(Outside, FullInside, StartInside, Cross);

  function GetCoordResult(X0, Cx, XLeft, XRight: double; out Tl, Th: double): TCoordResult;
  var t1, t2: double;
  begin
     if isZero(CX) then begin
       if InRange(X0, XLeft, XRight)
         then result:=FullInside
         else result:=Outside;
    end
    else begin
      t1:=(XLeft-X0)/Cx;
      t2:=(XRight-X0)/Cx;

      Tl:=min(t1, t2);
      Th:=max(t1, t2);

      if TH<0
        then Result:=Outside
      else if Tl<0 then begin
         Tl:=0;
         Result:=StartInside;
      end
      else Result:=Cross
    end;
  end;

var
  AssignValues: set of (L, H);
  MaxTL, MinTH, TL, TH: double;
  I: TCoord;
  CRes: TCoordResult;
begin
  Result:=False;
  AssignValues:=[];
  MinTH:=0; MaxTL:=0; //чисто чтобы компилятор не выдавал предупреждений

  for i:=low(TCoord) to high(TCoord) do begin

    with Info[i] do
      CRes:=GetCoordResult(A0, AC, BL, BH, TL, TH);

    case CRes of
      Outside: exit;
      FullInside: Continue;

      StartInside: //есть только время вылета
        if (L in AssignValues) and (TH<MaxTL) //вылетает раньше чем влетает по другой координате, вываливаемся
          then exit
        else begin
          if (H in AssignValues)
            then MinTH:=Min(TH, MinTH)
            else MinTH:=TH;

          include(AssignValues, H);
        end;
     else //cross
       if ((L in AssignValues) and (TH<MaxTL)) or //вылетает раньше чем влетает по другой координате
          ((H in AssignValues) and (TL>MinTH))    //влетает раньше чем вылетает по другой координате
          then exit;

       if L in AssignValues
         then MaxTL:=Max(TL, MaxTL)
         else MaxTL:=TL;

        if (H in AssignValues)
          then MinTH:=Min(TH, MinTH)
          else MinTH:=TH;

       AssignValues:=[L, H];
     end;
  end;

  if L in AssignValues then begin
    T:=MaxTL;
    Result:=true;
  end
  else if H in AssignValues then begin
    //точка старта находится внутри куба. Ругаться или нет - решай сам
    T:=MinTH;
    Result:=true;
  end
  else begin //все вектора скоростей нулевые,
    // ругаемся

  end;
end;
...
Рейтинг: 0 / 0
Четверговый кубик
    #39266581
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис, ну это круто конечно. Но мне придется портировать это на JavaScript едрен-батон.
...
Рейтинг: 0 / 0
Четверговый кубик
    #39266584
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
еще скажи, что это кто-то за тебя должен сделать.
...
Рейтинг: 0 / 0
Четверговый кубик
    #39266589
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спакуха.... тяпницаж.
...
Рейтинг: 0 / 0
Четверговый кубик
    #39266654
д0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonСпасибо.

Другое дело. Начинаю писать юнит-тесты.

Дальше - будет хуже .

Пойдут стрельбы по баллистической траектории.

Надо-ж заюзать пушки мать их так....

Уверен ?
Для изучения траектории пули приняты следующие определения:
определения:
Точка вылета — центр дульного среза ствола. Точка вылета является началом траектории.

Горизонт оружия — горизонтальная плоскость, проходящая через точку вылета.

Линия возвышения — прямая линия, являющаяся продолжением оси канала ствола наведенного оружия.

Плоскость стрельбы — вертикальная плоскость, проходящая через линию возвышения.

Угол возвышения — угол, заключенный между линией возвышения и горизонтом оружия. Если этот угол отрицательный, то он называется углом склонения (снижения).

Линия бросания — прямая линия, являющаяся продолжением оси канала ствола в момент вылета пули.

Угол бросания — угол, заключенный между линией возвышения и линией бросания.

Угол вылета — угол, заключенный между линией возвышения и линией бросания.

Точка падения — точка пересечения траектории с горизонтом оружия.

Угол падения — угол, заключенный между касательной к траектории в точке падения и горизонтом оружия.

Полная горизонтальная дальность — расстояние от точки вылета до точки падения.

Окончательная скорость — скорость пули (гранаты) в точке падения.

Полное время полета — время движения пули (гранаты) от точки вылета до точки падения.

Вершина траектории — наивысшая точка траектории над горизонтом оружия.

Высота траектории — кратчайшее расстояние от вершины траектории до горизонта оружия.

Восходящая ветвь траектории — часть траектории от точки вылета до вершины, а от вершины до точки падения — нисходящая ветвь траектории.

Точка прицеливания (наводки) — точка на цели (вне ее), в которую наводится оружие.

Линия прицеливания — прямая линия, проходящая от глаза стрелка через середину прорези прицела (на уровне с ее краями) и вершину мушки в точку прицеливания.

Угол прицеливания — угол, заключенный между линией возвышения и линией прицеливания.

Угол места цели — угол, заключенный между линией прицеливания и горизонтом оружия. Этот угол считается положительным (+), когда цель выше, и отрицательным (-), когда цель ниже горизонта оружия.

Прицельная дальность — расстояние от точки вылета до пересечения траектории с линией прицеливания. Превышение траектории над линией прицеливания — кратчайшее расстояние от любой точки траектории до линии прицеливания.

Линия цели — прямая, соединяющая точку вылета с целью.

Наклонная дальность — расстояние от точки вылета до цели по линии цели.

Точка встречи — точка пересечения траектории с поверхностью цели (земли, преграды).

Угол встречи — угол, заключенный между касательной к траектории и касательной к поверхности цели (земли, преграды) в точке встречи. За угол встречи принимается меньший из смежных углов, измеряемый от 0 до 90 градусов.


:)
...
Рейтинг: 0 / 0
Четверговый кубик
    #39266655
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док ты што артилеристом был?
...
Рейтинг: 0 / 0
Четверговый кубик
    #39266660
д0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonДок ты што артилеристом был?


В армии сапером общие навыки получил.
а жизнь сейчас такова , что приоидтся держать нос поверту.

От моего дома до реальной войны всего то 200 км :(

В списке еще этого нехватает
...
Рейтинг: 0 / 0
Четверговый кубик
    #39266662
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ешкин крот! У меня не симулятор а аркада. И куда мне с этими "девиациями" ?
...
Рейтинг: 0 / 0
Четверговый кубик
    #39266665
д0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonЕшкин крот! У меня не симулятор а аркада. И куда мне с этими "девиациями" ?

Де рива ция как раз та фича которая придаст игровому движку
неповторимость и новых потенциальных игроков любящих
естественные фичи приближенные к реальности...

Ты же не для дебилов игру делаешь ,
а для целевой аудитории располагающей определенным количеством денег,
которыми они потенцильно готовы с тобоей поделиться...
Если люди располагают свободными деньгами,
значит по жизни они не дебилы-неучи-идиоты...


Или я ошибся ?
...
Рейтинг: 0 / 0
Четверговый кубик
    #39266678
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
д0k,

уйма определений... а зачем они в контексте этой темы?

Если деривация хоть связана с ней, так как описывает отклонение, хотя достаточно незначительное, то остальное является просто терминами не относящимися к результату стрельбы.

P.S. Изюминкой игры может быть уточнение повреждений объектов (детализация повреждений объектов и персонажей) или разного рода рикошеты, осколки и т.д.
По поводу же деривация - это малоизвестный факт, и у игроков "среднего ума" будет вызывать недоумение, когда они будут промазывать из разных снайперских винтовок, хотя прицел был наведён точно на цель.

И если так, то более значимое отклонение даёт плотность воздуха (трение с ним). Так летом пуля летит намного дальше, чем зимой, что обязательно надо учитывать при стрельбе на большие расстояния. Лучше тогда уж это учесть... Игроку легче принять то, что пуля отклоняется по вертикали, чем то, что она отклоняется по горизонтали ))

Это так... моё мнение :)
...
Рейтинг: 0 / 0
Четверговый кубик
    #39266688
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из личных наблюдений. Игра-симулятор не интересна аудитории. Да и не собираюсь
я меряться хоботом с Wot. А вот веселая сетевая аркада где можно убить время
в конце трудовой недели - это да. Это по мне.
...
Рейтинг: 0 / 0
Четверговый кубик
    #39266727
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА вот веселая сетевая аркада где можно убить время
в конце трудовой недели - это да
зачем убивать время, есть масса практических задач, что характерно - из смежных областей
...
Рейтинг: 0 / 0
Четверговый кубик
    #39271585
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
что то я не вижу нужды в закрытии топика.
апд.
если будешь настаивать, то закрою.
...
Рейтинг: 0 / 0
25 сообщений из 51, страница 2 из 3
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Четверговый кубик
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]