Для начала, в общем виде, обсудим ситуацию: человек и языковая модель думают по разному. Не уверен, можно ли вообще применять данный глагол ко второму объекту.
	
	
	
		
		
		
			
		
		
	
	
		
	
Интуитивная схема начального этапа
Представим следующую ситуацию. ChatGPT известно о библиотеке, он представляет, что такое физика, но он абсолютно ничего не знает о том, что нужно человеку. С другой стороны, есть человек, у которого есть задача, он знаком с физикой, но в целом не знаком с библиотекой
Это значит, что, интуитивно на уровне гипотезы, существуют различные пути взаимодействия:
	
	
	
		
		
		
		
	
	
		
	
У нас есть три области информации, которые необходимо совместить, чтобы добиться практических результатов.
Несмотря на то, что цель у нас одна – добиться решения нашей проблемы средствами библиотеки Bullet, в процессе ее достижения необходимо будет решить несколько подзадач:
Сформируем запрос:
Используй репозиторий "https://github.com/bulletphysics/bullet3" Мы должны создать демонстрацию, наподобие HelloWorld. Мы должны использовать методы из папки исходных файлов. Здесь присутствует падающий объект, статичный объект и несколько страдающих объектов. Когда падающий объект сталкивается со статичным объектом, тогда на страдающие объекты применяется сила, зависящая от импульса столкновения, даже если страдающий и падающий объект не сталкиваются напрямую. Как я могу это сделать?
	
	
	
		
		
		
		
	
	
		
	
Запрос к ChatGPT
	
	
	
		
		
		
		
	
	
		
	
ChatGPT указал реализацию
Рассмотрим отдельно, как перемещается информация.
Итоговый код выглядит следующим образом:
for (int i = 0; i < numManifolds; i++)
{
auto man = manifolds;
int num_contacts = man->getNumContacts();
for (int j = 0; j < num_contacts; j++)
{
btManifoldPoint mpt = man->getContactPoint(j);
}}
В целях тестирования визуализируем точки столкновения с помощью UE. Как только возникает контакт, то создаём сферы видимого размера. По крайней мере, это в теории. На практике же означает, что мы будем исследовать массив btPersistentManifold.
	
	
	
		
		
		
		
	
	
		
	
Красные точки соответствуют массиву из объектов btPersistentManifold
Ссылка на видео с таймингом: Can ChatGPT help developer to create for using C++ libraries?
Сгенерированное совместно с ChatGPT решение выводит слишком много точек. В тоже время сомнительно, что сам движок обрабатывает вообще все точки в процессе своей работы.
Если принять за правду гипотезу, что физическая библиотека Bullet оптимизирует вычисления, то можно попробовать разобрать на составляющие внутренние процессы и забрать отфильтрованные значения.
Нам известна функция stepSimulation из предыдущих ответов ChatGPT. Мы можем предположить, что в процессе своей работы, вышеупомянутая функция будет фильтровать данные:
Переформулируем запрос:
Ты можешь написать и описать полный и отсортированный в порядке исполнения список функций, которые последовательно вызываются во время исполнения метода stepSimulation класса btDiscreteDynamicsWorld в репозитории https://github.com/bulletphysics/bullet3 и заданного файла по пути examples/HelloWorld/HelloWorld.cpp. Ты должен следовать следующей инструкции. Ты стартуешь с первой строчки stepSimulation, читай строчки пока не достигнешь функции, тогда добавь к списку методов, далее запомни эту позицию и прыгай в эту функцию и читай строчки в этой функции и добавь найденные функции в список. Не прыгай больше чем два раза. Если достигнешь конца метода, то возвращайся к запомненной позиции и продолжай чтение. Если достигнешь конца stepSimulation, остави это.
	
	
	
		
		
		
		
	
	
		
	
Скриншот запроса
Честно говоря, только сейчас понимаешь насколько это «поток чистых разума», после прочтения того, что пришло в воспаленную голову в момент общения.
Однако ChatGPT справился. Эксперимента ради, я отправил в запрос этот текст в нескольких «свежих» чатах. В самом худшем варианте, я на третьей «регенерации» запроса получал ответ схожий с предыдущей статьей.
Напомню, что там я получал список функций библиотеки Bullet в ответ на мой запрос. И есть определенная вероятность, что этот список связан с работой stepSimulation. В списке нашлась функция calculateSimulationIslands, описание которой содержит слово «group». Оно похоже на то, что мы ищем.
	
	
	
		
		
		
		
	
	
		
	
Строчка из ответа ChatGPT
Появился новый термин «Острова Симуляции». Череда простых вопросов, которые в общих чертах запрашивают информацию о связанных объектах с этим термином, приводит к следующему методу.
	
	
	
		
		
		
		
	
	
		
	
Ответ от ChatGPT
Функция buildAndProcessIsland напрямую указывает, что она создает острова симуляции и перебирает их, вызывая специальную callback функцию. Вроде бы все, что нам нужно, это забрать данные, когда он приходят в callback.
Однако, здесь у меня началось полнейшее непонимание с ChatGPT. Я запрашивал у него наследуемые классы от этого IslandCallback, в том числе связанные с HelloWorld, но он продолжал отвечать, что существует btDiscreteDynamicWorld::IslandCallback, который на самом деле не существует. А InplaceSolverIslandCallback, который в два счета находится простым поиском по ключевому слову, находить отказывался.
На какой-то момент я сдался и просто загрузил то, что использовал в начале, теперь уже в InplaceSolverIslandCallback.
	
	
	
		
		
		
		
	
	
		
	
Результат работы вставленной функции
Ссылка на видео с таймингом: Can ChatGPT help developer to create for using C++ libraries?
Таким сложным путем можно прийти к чему-то похожему, что я пытаюсь реализовать. Ведь зная точки столкновения можно реализовать исходный посыл, осталось только реализовать массивы страдающих кубов и определить падающий куб, далее найти импульс удара и рассчитать расстояние.
Так ChatGPT предлагает определять относятся точки к падающему телу или нет:
	
	
	
		
		
		
		
	
	
		
	
ChatGPT
btCollisionObject * obj0 = manifold->getBody0();
Так применять силу:
	
	
	
		
		
		
		
	
	
		
	
ChatGPT
body->applyForce(force, btVector3(0,0,0));
Так брать импульс:
	
	
	
		
		
		
		
	
	
		
	
ChatGPT
float impulse = point->m_appliedImpulse;
Если собрать все, что было, в одну кучу, то получим некоторое решение нашей задачи.
	
	
	
		
		
		
		
	
	
		
	
Иллюстрация решения
Ссылка на видео с таймингом: Can ChatGPT help developer to create for using C++ libraries?
Заключение
В этой статье рассмотрено практическое применение использования ChatGPT в решении задач.
Из неочевидных проблем, озвученных в статье, можно отметить следующее:
	
	
		
			
				
					
						
					
				
			
			
				
					
						
							
						
					
					habr.com
				
			
		
	
			
			
	Интуитивная схема начального этапа
Представим следующую ситуацию. ChatGPT известно о библиотеке, он представляет, что такое физика, но он абсолютно ничего не знает о том, что нужно человеку. С другой стороны, есть человек, у которого есть задача, он знаком с физикой, но в целом не знаком с библиотекой
Это значит, что, интуитивно на уровне гипотезы, существуют различные пути взаимодействия:
- Конкретизировать инструкции, чтобы направить творческие возможности ChatGPT и оптимизировать его инструменты по работе с данными;
 - Рассказать подробно о себе ChatGPT, чтобы у него сложилось понимание о собеседнике;
 - Предложить ChatGPT ролевую модель, чтобы ограничить его реакции.
 
	У нас есть три области информации, которые необходимо совместить, чтобы добиться практических результатов.
Несмотря на то, что цель у нас одна – добиться решения нашей проблемы средствами библиотеки Bullet, в процессе ее достижения необходимо будет решить несколько подзадач:
- Использовать понятия, связанные с физикой;
 - Увеличить понимание задач для ChatGPT;
 - Увеличить понимание библиотеки для человека.
 
Сформируем запрос:
Используй репозиторий "https://github.com/bulletphysics/bullet3" Мы должны создать демонстрацию, наподобие HelloWorld. Мы должны использовать методы из папки исходных файлов. Здесь присутствует падающий объект, статичный объект и несколько страдающих объектов. Когда падающий объект сталкивается со статичным объектом, тогда на страдающие объекты применяется сила, зависящая от импульса столкновения, даже если страдающий и падающий объект не сталкиваются напрямую. Как я могу это сделать?
	Запрос к ChatGPT
ChatGPT ответил в несколько этапов, периодически заикась, но, в результате предложил следующее.Здесь и далее прошу прощения за «мыло», так как исходные диалоги потерялись осталось только видео
	ChatGPT указал реализацию
Рассмотрим отдельно, как перемещается информация.
  | ChatGPT  | Человек  | 
Bullet  | Ее необходимо использовать, в качестве примера реализации брать файл HelloWorld  | Для решения задачи необходимо использовать btPersistentManifold, btRigitBody. Необходимо размещать после(?) stepSimulation  | 
Физика  | Речь идет о твердых телах  | Столкновения могут быть между твердыми телами  | 
Задача  | Необходимо создать рабочий пример с инструкциями  | Задача напрямую связана точками столкновения  | 
for (int i = 0; i < numManifolds; i++)
{
auto man = manifolds;
int num_contacts = man->getNumContacts();
for (int j = 0; j < num_contacts; j++)
{
btManifoldPoint mpt = man->getContactPoint(j);
}}
В целях тестирования визуализируем точки столкновения с помощью UE. Как только возникает контакт, то создаём сферы видимого размера. По крайней мере, это в теории. На практике же означает, что мы будем исследовать массив btPersistentManifold.
	Красные точки соответствуют массиву из объектов btPersistentManifold
Ссылка на видео с таймингом: Can ChatGPT help developer to create for using C++ libraries?
Сгенерированное совместно с ChatGPT решение выводит слишком много точек. В тоже время сомнительно, что сам движок обрабатывает вообще все точки в процессе своей работы.
Во время написания статьи обратил внимание, что не все точки подкрашены красным. Верхние точки синих кубов не отмечены. К сожалению, это в дальнейшем не будет использоваться. Негативное последствие спешки, так как не очень-то хотелось уделять большое количество времени тестам.
  | ChatGPT  | Человек  | 
Bullet  | Столкновения между статическими объектами тоже считаются  | В btPersistentManifold слишком много точек  | 
Физика  |   |   | 
Задача  |   | Необходимо фильтровать данные  | 
Если принять за правду гипотезу, что физическая библиотека Bullet оптимизирует вычисления, то можно попробовать разобрать на составляющие внутренние процессы и забрать отфильтрованные значения.
Нам известна функция stepSimulation из предыдущих ответов ChatGPT. Мы можем предположить, что в процессе своей работы, вышеупомянутая функция будет фильтровать данные:
- Исключать;
 - Объединять;
 - Группировать;
 - Разгруппировать
 
Переформулируем запрос:
Ты можешь написать и описать полный и отсортированный в порядке исполнения список функций, которые последовательно вызываются во время исполнения метода stepSimulation класса btDiscreteDynamicsWorld в репозитории https://github.com/bulletphysics/bullet3 и заданного файла по пути examples/HelloWorld/HelloWorld.cpp. Ты должен следовать следующей инструкции. Ты стартуешь с первой строчки stepSimulation, читай строчки пока не достигнешь функции, тогда добавь к списку методов, далее запомни эту позицию и прыгай в эту функцию и читай строчки в этой функции и добавь найденные функции в список. Не прыгай больше чем два раза. Если достигнешь конца метода, то возвращайся к запомненной позиции и продолжай чтение. Если достигнешь конца stepSimulation, остави это.
	Скриншот запроса
Честно говоря, только сейчас понимаешь насколько это «поток чистых разума», после прочтения того, что пришло в воспаленную голову в момент общения.
Однако ChatGPT справился. Эксперимента ради, я отправил в запрос этот текст в нескольких «свежих» чатах. В самом худшем варианте, я на третьей «регенерации» запроса получал ответ схожий с предыдущей статьей.
Напомню, что там я получал список функций библиотеки Bullet в ответ на мой запрос. И есть определенная вероятность, что этот список связан с работой stepSimulation. В списке нашлась функция calculateSimulationIslands, описание которой содержит слово «group». Оно похоже на то, что мы ищем.
	Строчка из ответа ChatGPT
Появился новый термин «Острова Симуляции». Череда простых вопросов, которые в общих чертах запрашивают информацию о связанных объектах с этим термином, приводит к следующему методу.
	Ответ от ChatGPT
Функция buildAndProcessIsland напрямую указывает, что она создает острова симуляции и перебирает их, вызывая специальную callback функцию. Вроде бы все, что нам нужно, это забрать данные, когда он приходят в callback.
Однако, здесь у меня началось полнейшее непонимание с ChatGPT. Я запрашивал у него наследуемые классы от этого IslandCallback, в том числе связанные с HelloWorld, но он продолжал отвечать, что существует btDiscreteDynamicWorld::IslandCallback, который на самом деле не существует. А InplaceSolverIslandCallback, который в два счета находится простым поиском по ключевому слову, находить отказывался.
На какой-то момент я сдался и просто загрузил то, что использовал в начале, теперь уже в InplaceSolverIslandCallback.
	Результат работы вставленной функции
Ссылка на видео с таймингом: Can ChatGPT help developer to create for using C++ libraries?
Таким сложным путем можно прийти к чему-то похожему, что я пытаюсь реализовать. Ведь зная точки столкновения можно реализовать исходный посыл, осталось только реализовать массивы страдающих кубов и определить падающий куб, далее найти импульс удара и рассчитать расстояние.
Так ChatGPT предлагает определять относятся точки к падающему телу или нет:
	ChatGPT
btCollisionObject * obj0 = manifold->getBody0();
Так применять силу:
	ChatGPT
body->applyForce(force, btVector3(0,0,0));
Так брать импульс:
	ChatGPT
float impulse = point->m_appliedImpulse;
Если собрать все, что было, в одну кучу, то получим некоторое решение нашей задачи.
	Иллюстрация решения
Ссылка на видео с таймингом: Can ChatGPT help developer to create for using C++ libraries?
Заключение
В этой статье рассмотрено практическое применение использования ChatGPT в решении задач.
Из неочевидных проблем, озвученных в статье, можно отметить следующее:
- Так и не смог с помощью чата «найти» InplaceSolverIslandCallback. Стоимость этой проблемы очень низка, так как решается простым поиском.
 - Так и не смог заставить чат «предложить» функцию activate, а без нее страдающие объекты не двинулись бы с места. Стоимость этой проблемы невероятно высока, так как даже документация напрямую нигде не указывает об этом. Внутренняя логика такова, что только сталкивающие объекты обрабатываются алгоритмами. В нашем случае, сила как бы берется из «ниоткуда», поэтому алгоритм просто проигнорирует наше добавление силы. Здесь наверно требуется какой-то особый подход.
 - Не заметил, что не все точки были «подкрашены» на первом этапе. Тоже о стоимости нельзя ничего сказать, так как попросту упустил это из виду. Возможно, я смог бы найти иное решение проблемы.
 
					
				Скоростной серфинг по библиотеке с помощью ChatGPT
В прошлой статье в теории были рассмотрены некоторые аспекты использования ChatGPT в узконаправленной области изучения библиотеки Bullet Physics library. Теперь попробую привести практический пример....