Процессуально сгенерированное сердце в JavaScript - PullRequest
0 голосов
/ 08 февраля 2019

медленно изучаю JavaScript на стороне и хотел попробовать и оживить это с Three.JS: https://www.reddit.com/r/gifs/comments/ag6or3/send_this_to_your_loved_ones_for_valentines/

Я пытался воссоздать это уравнение, но натолкнулся на стену, в которой код нижене дает правильный результат.Я читал, что у JS есть некоторые серьезные проблемы с числами с плавающей запятой, и, в частности, кубические корни на самом деле не очень хорошо работают.

for (var x = -100; x < 100; x++)
{
 y = Math.pow(x, 2/3) + 0.9 * (Math.pow(3.0 - (x*x), 0.5)) * Math.sin(10 * 
 Math.PI * x)
}

Подходит ли вам это, мастера JS?

Вот моя реализация кода в попытке заставить это работать, включая исправление, упомянутое ниже.https://codesandbox.io/s/vjm4xox185

Ответы [ 3 ]

0 голосов
/ 08 февраля 2019

Проблема в том, что результат вычисления (Math.pow(3.0 - (x*x), 0.5)) возвращает NAN как будто нереалистичное число

Чтение здесь для получения дополнительной информации о Math.pow(negativeNumber, 0.5), поэтому я добавил validPow, который проверит, х является положительным или отрицательным и вернет правильный результат.

for (var x = -100; x < 100; x++)
{

 y = (Math.pow(x, 2/3) + 0.9) * (validPow(3.0 - (x*x), 0.5)) * 
 Math.sin(10 * Math.PI * x)
 
 console.log(y)
 

}

function validPow(x, y)
{
            var result = Math.pow(x, y);
            if (x > 0)
            {
                return result;
            }
            else
            {
                return -1 * Math.pow(-x, y);
            }
}
0 голосов
/ 14 февраля 2019

Наконец-то решил это.

Эта строка сводится к тому, что ключ в том, чтобы использовать Math.abs (x) внутри первого оператора Math.pow: var y = Math.pow(Math.abs(x), 0.66) + (0.9 * Math.sqrt(3.3 - x * x)) * Math.sin(10 * Math.PI * x);

Спасибо всем, кто предоставил информацию и помощь!

Вы можете посмотреть окончательный результат здесь: https://codesandbox.io/s/vjm4xox185

0 голосов
/ 08 февраля 2019

Посмотрите на диапазон графика, на который вы ссылаетесь.Сердце тянется в диапазоне x: [-2, 2], но ваш цикл от x: [-100, 100].Это означает, что вы, вероятно, получите неопределенные результаты для всех значений x, кроме -1, 0, 1.Попробуйте сузить диапазон вашей петли for(), и вы получите желаемый результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...