Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/34: Рейтинг темы: голосов - 34, средняя оценка - 4.68
0 / 0 / 3
Регистрация: 19.03.2015
Сообщений: 207

Как найти в массиве объектов объекты, которые очень близки по координатам?

01.04.2016, 02:32. Показов 7267. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
не могу понять как это сделать
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.04.2016, 02:32
Ответы с готовыми решениями:

Найти элементы массива, которые наиболее и наименее близки к данному числу
Помогите пожалуйста решить Дано число R и массив размера N. Найти элементы массива, который 1) наиболее и 2) наименее близок к данному...

Дано вещественное число R и массив вещественных чисел. Найти 2 элементы массива, которые наименее близки к данному числу R
Дано вещественное число R и массив вещественных чисел. Найти 2 элементы массива, которые наименее близки к данному числу R. пожалусто...

В последовательности найти числа, которые близки к числам другой последовательности
даны две последовательности чисел A = {a1, a2,…, an}, B = {b1, b2, …, bn},напечатать те и только те числа aj из последовательности A, для...

20
 Аватар для Fulcrum_013
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
01.04.2016, 04:50
Считаешь дистанцию до каждого. Те у которых дистанция меньше того что у тебя считается очень близко и есть те которые очень близко. Если тех которые между собой очень близко, то проделываешь такую операцию для каждого с каждым.
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
01.04.2016, 07:56
dobrotiu, 2д или 3д?
Fulcrum_013, а если объектов 100+, начинаются лаги на мобилке, ага.
0
 Аватар для Fulcrum_013
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
01.04.2016, 08:23
Цитата Сообщение от Cr0c Посмотреть сообщение
а если объектов 100+, начинаются лаги на мобилке, ага.
Не ну можно их позапихивать в ячейки сетки и проверять с соседними ячейками. Но тогда на мобилке память начнет заканчиваться.
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
01.04.2016, 09:29
dobrotiu, для 3д - Physics.OverlapSphere, для 2д - Physics2D.OverlapCircle
Fulcrum_013, это по скорости быстро работает.
0
 Аватар для Fulcrum_013
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
01.04.2016, 09:43
Цитата Сообщение от Cr0c Посмотреть сообщение
это по скорости быстро работает.
А попадание в сферу типа ни разу не вычислением расстояния до ее центра считается?
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
01.04.2016, 10:21
Fulcrum_013, для этой задачи - быстрее вернется массив объектов, а из него найти ближайший быстрее. Отсекутся из проверки заведомо дальние,
0
 Аватар для Fulcrum_013
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
01.04.2016, 19:14
Цитата Сообщение от Cr0c Посмотреть сообщение
для этой задачи - быстрее вернется массив объектов, а из него найти ближайший быстрее. Отсекутся из проверки заведомо дальние,
А объекты в этот массив типа ни разу не по вычислению расстояния от них до центра сферы заносятся? Ну нельзя найти ближайших не вычисляя расстояния.
0
0 / 0 / 3
Регистрация: 19.03.2015
Сообщений: 207
03.04.2016, 00:41  [ТС]
Цитата Сообщение от Cr0c Посмотреть сообщение
dobrotiu, для 3д - Physics.OverlapSphere
Для 3д, как это в коде примернно описать?

Добавлено через 1 час 6 минут
Я в лист объекты запихиваю, так проще, подскажите как с ним сделать
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
03.04.2016, 07:47
dobrotiu, справку для кого писали? Physics.OverlapSphere
0
0 / 0 / 3
Регистрация: 19.03.2015
Сообщений: 207
04.04.2016, 00:35  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
11
12
Vector3 vectora(Vector3 centr, float radius)
    {
        Collider[] hitColliders = Physics.OverlapSphere(centr, radius);
        int g = 0;
        while (g < hitColliders.Length) {
         hitColliders[g].SendMessage("AddDamage");
        GameObject  tor = GenClone;
            g++;
        }
 
        return centr;
    }
Вот я сделал так
потом яя сделал так
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
for (int i = 0; i < n; i++) {
            for (int j =0; j < m; j++) {
                rastojanie = new Vector3 (((-n) / 2) + komnat_len / 2, 0.0f, ((m) / 2) + komnat_len / 2);
        
                res_pos = new Vector3 (rastojanie.x + (i * komnat_len) + komnat_len * 2, 0.0f, rastojanie.z + (j * komnat_len) - komnat_len * 2);
                Vector3 pol = (Vector3) vectora(new Vector3 (Random.Range ( transform.position.x+5, res_pos.x *2 ), 0.0f, Random.Range ( transform.position.z-5, res_pos.z*2)),9.0f);
                GenClone = (GameObject)Instantiate (comnata,pol , Quaternion.identity);
                GenClone.transform.parent = Holder.transform;
            
 
                
            }
        }
А потом бывают такое не часто
SendMessage AddDamage has no receiver!
UnityEngine.Component:SendMessage(String )
DunGen:vectora(Vector3, Single) (at Assets/script/DunGen.cs:46)
DunGen:Gen() (at Assets/script/DunGen.cs:31)
Что не так тут??
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
04.04.2016, 07:58
dobrotiu, получателей дамага в отдельный слой вынесете и в Physics.OverlapSphere(centr, radius) добавьте, тогда кроме них другие объекты не попадут в список.
0
0 / 0 / 3
Регистрация: 19.03.2015
Сообщений: 207
04.04.2016, 15:04  [ТС]
не понял что вынести, можешь показать
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
04.04.2016, 15:59
dobrotiu, создать слой, всем потенциальным получателям дамага его назначить и в оверлапе искать по этому слою, к не по всем.
0
0 / 0 / 3
Регистрация: 19.03.2015
Сообщений: 207
04.04.2016, 18:05  [ТС]
Не понимаю, что ты имеешь в виду под словом слой

Добавлено через 50 минут
пример можешь показать?
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
04.04.2016, 18:06
dobrotiu, Слои (Layers)
0
0 / 0 / 3
Регистрация: 19.03.2015
Сообщений: 207
04.04.2016, 19:47  [ТС]
Я попытался но выходит так как-то не так

Добавлено через 3 минуты
C#
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
Vector3 vectora(Vector3 centr, float radius,int layerMask )
    {
        Collider[] hitColliders = Physics.OverlapSphere(centr, radius, layerMask);
        int g = 0;
         layerMask = 1 << 8;
        RaycastHit hit;
        while (g < hitColliders.Length) {
            g++;
                GameObject tor = GenClone;
            if (Physics.Raycast(transform.position, Vector3.forward, Mathf.Infinity, layerMask)){
            
                hitColliders[g].SendMessage("AddDamage");
 
                
                Debug.Log("Did Hit");
 
            } else {
                Debug.Log("Did not Hit");
            }
 
        }
 
    
    return centr;
    }
что теперь надо сделать?

Добавлено через 23 минуты
что теперь надо сделать?
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
А объекты в этот массив типа ни разу не по вычислению расстояния от них до центра сферы заносятся? Ну нельзя найти ближайших не вычисляя расстояния.
можешь рассказать как сделать
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
04.04.2016, 19:51
dobrotiu, LayerMask.NameToLayer
для чего рейкаст?
0
0 / 0 / 3
Регистрация: 19.03.2015
Сообщений: 207
04.04.2016, 20:15  [ТС]
рейкаст это случайно

Добавлено через 44 секунды
не могу понять что делать.
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
04.04.2016, 21:39
dobrotiu,
C#
1
2
3
4
5
6
7
8
9
Vector3 vectora(Vector3 centr, float radius,string layerName )
{
        Collider[] hitColliders = Physics.OverlapSphere(centr, radius, LayerMask.NameToLayer(layerName));
        for (int i=0; i<hitColliders.Length; i++) {
             hitColliders[i].SendMessage("AddDamage");
             Debug.Log("Send to: "+ hitColliders[i].name);
        }
    return centr;
}
На объекты, которые должны получить сообщение, поставить отдельный слой, имя которого передаётся в метод.
И у этих объектов должен быть метод, чтобы принять сообщение.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.04.2016, 21:39
Помогаю со студенческими работами здесь

Функция создает объекты и указателями на них заполняет массив. При выходе из функции вызываются деструкторы объектов. Как сохранить объекты?
Вопрос прост: как при выходе из функции сохранить объекты, которые были созданы в данной функции (указатели объектов положены в массив)?

Как найти объекты которые мешают автофильтру?
С новым годом! Добрый день всем! Есть лист excel. На листе применяю автофильтр Лист защищен от изменений Помимо самих данных на...

В массиве объектов класса все объекты заполняются данными последнего
Есть задача: напишите программу, которая может выводить список членов по реальным именам, должностям, секретным именам и по предпочтению...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru