Окружность

332
4
Всем привет, пишу библиотеку(движок) на java. Начал недавно и физики еще не затронулся, зато затронулся геометрии, вобщем надо(для теста) вывести в консоль точки окружность, все точки. И вот, собственно, я забыл ( а может и не знал ) как в окружности каждая точка меняет свои координаты, но при этом остается равноудаленной от центра. Вобщем у кого нет проблем с геометрией и кто, может, помнит эту формулу прошу помочь)
[merge_posts_bbcode]Добавлено: 02.06.2016 16:14:14[/merge_posts_bbcode]

Сори, во флудилку нид было)

[merge_posts_bbcode]Добавлено: 02.06.2016 16:15:19[/merge_posts_bbcode]

Сори, во флудилку нид было)
 
Можем взять цикл, где обойдем все точки в радиусе Radius поблочно, и проверим их вхождение в круг (с шагом в 0.1, то есть 16 точек на блок)
Код:
for(double x = posX - Radius; x < posX + Radius; x += 0.1)
{
    for(double z = posZ - Radius; z < posZ + Radius; z += 0.1)
    {
        if(Math.pow(x - posX, 2) + Math.pow(z - posZ, 2) <= Radius)
        {
            System.out.println("Exists in circle");
        }
    }
}

Код не проверял, но вроде должен работать.
Вот формула, кажеться та:
(x-x0)^2+(y-y0)^2=R^2
x0 и y0 - центр окружности, R - ее радиус, вместо x и у подставляем координаты точки.
Если код работает ( :) ), то вместо System.out.println записывать их в массив, например, чтобы дальше использовать, или же сразу в той точке что-то делать
[merge_posts_bbcode]Добавлено: 02.06.2016 16:57:24[/merge_posts_bbcode]

Работает :)

niZCEuw0LRo.jpg
 
Kotor написал(а):
все точки в радиусе
Он сказал окружность, не круг. Это все точки, равноудалённые и находящиеся в одной плоскости с данной.
Формула правильна, но ему нужна зависимость X от Y, а ты дал "= R"

Код:
Y = +/- sqrt(R^2 - X^2)

Например, спаун партиклов вокруг игрока (на равном расстоянии, кольцом):
Код:
if (x > 1.0) x = -1.0;
if (X < -1.0) X = 1.0;
double z = Math.sqrt(1 - x * x);
player.worldObj.spawnParticle("happyVillager", player.posX + x, player.posY - 1.5 + up, player.posZ + z, 0.0D, 0.0D, 0.0D);
double Z = - (Math.sqrt(1 - X * X));
player.worldObj.spawnParticle("happyVillager", player.posX + X, player.posY - 1.5 + up, player.posZ + Z, 0.0D, 0.0D, 0.0D);
x += 0.05;
X -= 0.05;
 
Лишь слегка изменив условие вывода частиц, можно добиться такого:
xqcmgz6TpJA.jpg


Код:
if((int) (Math.pow(x - player.posX, 2) + Math.pow(z - player.posZ, 2)) == radius)

Конечно, это один из методов, но лично мне проще такой, хоть это и не совсем экономно - обходить все точки в круге, чтобы получить лишь некоторые
 
Kotor написал(а):
Лишь слегка изменив условие вывода частиц, можно добиться такого:
xqcmgz6TpJA.jpg


Код:
if((int) (Math.pow(x - player.posX, 2) + Math.pow(z - player.posZ, 2)) == radius)

Конечно, это один из методов, но лично мне проще такой, хоть это и не совсем экономно - обходить все точки в круге, чтобы получить лишь некоторые
Выглядит впечатляюще, но думаю вместо огня лучше бы смотрелись "адские" символы. Ну думаю все поняли с чем я сравнивал.
 
Назад
Сверху