Основной новаторский с предотвращением препятствия в непрерывном 2D пространстве

Вы добавляете имена файлов в массив fileList, но во втором цикле for вы перебираете имена файлов вместо fileList. импорт ОС

os.chdir('/Users/Me/Api/downloaded')

fileList = []
keywordList = []

for filenames in os.walk('/Users/Me/Api/downloaded'):
    fileList.append(filenames)

for file in fileList:
    with open(file, encoding='utf-8', mode='r') as currentFile:
        keywordList.append(currentFile['keyword'])
9
задан kpozin 17 May 2009 в 16:14
поделиться

5 ответов

Расширяя сказанное Гийомом об избежании препятствий, метод, который будет работать хорошо для вас антигравитационное движение . Вы относитесь к местным препятствиям как к точечным источникам антигравитации,

6
ответ дан 4 December 2019 в 15:26
поделиться

вы можете комбинировать два алгоритма управления:

seek : вы прикладываете усилие поворота в направлении, которое является разностью между текущей скоростью и желаемой скоростью по направлению к цели

Предотвращение препятствий : вы предвидите будущее транспортного средства, используя прямоугольник, длина которого представляет собой постоянное время, умноженное на текущую скорость транспортного средства. Любое препятствие, которое пересекает это поле, представляет собой потенциальную угрозу столкновения. Ближайшая такая угроза выбирается для предотвращения. Чтобы избежать препятствия, прикладывается боковое усилие поворота напротив центра препятствия. Кроме того, прилагается тормозная (замедляющая) сила. Эти силы меняются в зависимости от срочности (расстояние от кончика ящика до точки потенциального столкновения). Рулевое управление изменяется линейно, торможение - квадратично.

5
ответ дан 4 December 2019 в 15:26
поделиться

Возможно, вы могли бы использовать алгоритм Pledge

2
ответ дан 4 December 2019 в 15:26
поделиться

Некоторое время назад я опубликовал алгоритм поиска пути на C #

Вот ссылка

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

(Текст на испанском языке, но вы можете скачать приложение по ссылке вверху)

-1
ответ дан 4 December 2019 в 15:26
поделиться

Каждый раз, когда ваше существо, путешествуя в векторном направлении v , сталкивается со стеной, направление которой представлено вектором w , направление, которое вам нужно "слайд" задается вектором, который является проекцией v на w . Это можно найти с помощью

  v . w
--------- w
 |w|*|w|

, где . - векторное скалярное произведение , а | w | - величина вектора w (= sqrt (w. w) ). Если w является единичным вектором, это становится просто

(v . w) w

. Использование полученного вектора в качестве скорости вашего существа будет означать, что ваше существо перемещается быстро, когда оно просто «задевает» стену, и медленно, когда оно почти ударяется о стену. мертвые на. (Именно так большинство шутеров от первого лица управляют столкновениями для игрока-человека.)

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

Проблема, которую вы будете have - это когда ваше существо врезается в стену. В этом случае ваш спроецированный вектор будет (0, 0), и вам понадобится другая техника, чтобы решить, в какую сторону ( w или -w ) идти. Обычный подход здесь - A *, хотя в этом может быть необходимость, если ваша среда обладает достаточной структурой.

w - вы всегда будете двигаться либо в направлении стены ( w ), либо в противоположном направлении ( -w ).

Проблема, которую вы будете have - это когда ваше существо врезается в стену. В этом случае ваш спроецированный вектор будет (0, 0), и вам понадобится другая техника, чтобы решить, в какую сторону ( w или -w ) идти. Обычный подход здесь - A *, хотя в этом может быть необходимость, если ваша среда обладает достаточной структурой.

w - вы всегда будете двигаться либо в направлении стены ( w ), либо в противоположном направлении ( -w ).

Проблема, которую вы будете have - это когда ваше существо врезается в стену. В этом случае ваш спроецированный вектор будет (0, 0), и вам понадобится другая техника, чтобы решить, в какую сторону ( w или -w ) идти. Обычный подход здесь - A *, хотя в этом может быть необходимость, если ваша среда обладает достаточной структурой.

и вам нужна другая техника, чтобы решить, по какому пути ( w или -w ) идти. Обычный подход здесь - A *, хотя в этом может быть необходимость, если ваша среда обладает достаточной структурой.

и вам нужна другая техника, чтобы решить, по какому пути ( w или -w ) идти. Обычный подход здесь - A *, хотя в этом может быть необходимость, если ваша среда обладает достаточной структурой.

1
ответ дан 4 December 2019 в 15:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: