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

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

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

Author24 — интернет-сервис помощи студентам
не могу понять как это сделать
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.04.2016, 02:32
Ответы с готовыми решениями:

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

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

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

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

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

Добавлено через 1 час 6 минут
Я в лист объекты запихиваю, так проще, подскажите как с ним сделать
0
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
03.04.2016, 07:47 10
dobrotiu, справку для кого писали? Physics.OverlapSphere
0
0 / 0 / 3
Регистрация: 19.03.2015
Сообщений: 207
04.04.2016, 00:35  [ТС] 11
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
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
04.04.2016, 07:58 12
dobrotiu, получателей дамага в отдельный слой вынесете и в Physics.OverlapSphere(centr, radius) добавьте, тогда кроме них другие объекты не попадут в список.
0
0 / 0 / 3
Регистрация: 19.03.2015
Сообщений: 207
04.04.2016, 15:04  [ТС] 13
не понял что вынести, можешь показать
0
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
04.04.2016, 15:59 14
dobrotiu, создать слой, всем потенциальным получателям дамага его назначить и в оверлапе искать по этому слою, к не по всем.
0
0 / 0 / 3
Регистрация: 19.03.2015
Сообщений: 207
04.04.2016, 18:05  [ТС] 15
Не понимаю, что ты имеешь в виду под словом слой

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

Добавлено через 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
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
04.04.2016, 19:51 18
dobrotiu, LayerMask.NameToLayer
для чего рейкаст?
0
0 / 0 / 3
Регистрация: 19.03.2015
Сообщений: 207
04.04.2016, 20:15  [ТС] 19
рейкаст это случайно

Добавлено через 44 секунды
не могу понять что делать.
0
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
04.04.2016, 21:39 20
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
04.04.2016, 21:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.04.2016, 21:39
Помогаю со студенческими работами здесь

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru