Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2015, 22:35   #1
Black_Stone
Новичок
Джуниор
 
Регистрация: 30.10.2015
Сообщений: 1
По умолчанию

Ребят может есть у кого ни-буть алгоритм от рисовки острова на Прелине
не нашел не чего толкового на эту тему

в прицепи у меня даже получилось что та похожие на острова

откопал замечательнейшую формулу

theta = random (0,2п);
distance = random (0,size / 2 - radius)
x = size / 2 + cos (theta) * distance
y = size / 2 + sint (theta) * distance

здесь size - размер карты высот, distance - расстояние, theta - угол. радиус должен быть меньше половины размера карты высот.

использовал так

Код:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class Generate_map_perlin_noise : MonoBehaviour {
        
        public float Map_With = 1000;
        public float Map_Heigh = 1000;



        public float noise;
        public GameObject Grunt;

        
        void Start () 
        {
                
                Map_With = 250;
                Map_Heigh = 250;

                
                float Radius = 40;
                float theta = Random.Range(0,Mathf.PI * 2 / Radius);
                

                float distanceX = Random.Range(0,Map_With /2 * Radius);
                float distanceZ = Random.Range(0,Map_With /2 * Radius);


                for (int x = 0; x <= Map_Heigh; x+= 1) 
                {
                        for (int z = 0; z <= Map_With; z+= 1)
                        {

                                float noisex = ((float)x / Radius)+ Mathf.Cos(theta) *  distanceX;
                                        
                                float noisez = ((float)z / Radius)+ Mathf.Sin(theta) * distanceZ ;

                                
                                 noise = Mathf.PerlinNoise (noisex,noisez);
                                
                                
                                if (noise > 0.5)
                                {
                                Instantiate (Grunt, new Vector3 (x,(int)(noise*10),z), Quaternion.identity);
                                }

                        }
                        
                }
                
        }

}
вот результат

https://pp.vk.me/c629414/v629414465/...7Rm_xx9P80.jpg


Получается бесконечная сетка из островов

как сделать одиночный остров или холм или 3 острова и тд

Если кто разбирается помогите пожалуйста

Последний раз редактировалось Аватар; 31.10.2015 в 22:43.
Black_Stone вне форума Ответить с цитированием
Старый 03.11.2015, 17:28   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

http://www.redblobgames.com/ тут есть неплохая теория
phomm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шум перлина Антон-Царевич C# (си шарп) 0 26.04.2013 19:27
Генератор случайных чисел на основе шума звуковой карты dx+ Общие вопросы Delphi 7 20.06.2009 09:52
ГСЧ на основе шума. RomanIgorevi4 Общие вопросы C/C++ 0 04.06.2009 22:16