Я хочу знать, как себе делает функция в javascript, что возвратил координаты в определенной минуте. Центральные координаты - центр часов, так что это могут быть отрицания.
В Микрорабах я нашел ссылку, которая делает параллелизм, в которое я спрашиваю, это часы, которые дают тебе час в координатах.
Я тестирую деление или вычитание, но он не вытекает.
function(minutos)
{
var x=0,y=0
x=minutos*60
y=x-12
return [x,y]
}
Я издаю:
Смотря какие-то ответы я видел немного странно: Почему использовать косинус, если возможно извлекать в стоимости используя лоно?
Согласно этой странице Гаме Девелопмент и этой другой из Mathematics (оба на английском), координаты точки могут быть вычисленными зная
Исходя из, что сориентировал его часов, у него есть координаты [0,0]
, тогда формула для координат новой точки была бы чем-то как это:
nuevas_coordenadas = [ distancia * coseno(angulo) , - distancia * seno(angulo) ]
Действительно он помещает, что он должен бы быть
distancia * seno(angulo)
, но он выходит у меня правильным только, если я это помещаю как негатив. Может быть, я понял плохо, но с-
функционируй.
Для лона и косинуса мы можем использовать функции sin()
и cos()
языка сценариев JavaScript, оба берут как параметр угол в radianes. И это приводит нас во вторую точку: угол в radianes. Мы знаем, что окружность имеет 2π radianes, и что есть 60 минут в час, а следовательно для каждой минуты, угол будет чем-то как это:
ángulo = 2π * minutos / 60 = π * minutos / 30
Для стоимости π мы можем использовать свойство PI
. Но он имеет немного приема, как адрес - в правую сторону, это значит, что мы в минуте 15 первых, а следовательно будет нужно налаживать немного угол:
ángulo = π * (minutos - 15) / 30
И помещая все это объединено, у нас осталось бы что-то как это:
function calculaCoordenadasMinuto(minuto) {
var distancia = 1; // supongo que el minutero tiene una distancia de 1
var angulo = Math.PI * minuto / 30;
return [ distancia * Math.cos(angulo), -distancia * Math.sin(angulo) ];
}
Здесь я оставляю пример (используя секунды вместо минут, но идея сходная):
var pos = 0;
function calculaCoordenadasMinuto(minuto) {
var angulo = Math.PI * (minuto - 15) / 30;
return [ Math.cos(angulo), -Math.sin(angulo) ];
}
setInterval(function() {
pos++;
var coords = calculaCoordenadasMinuto(pos);
var segundo = document.getElementById("segundo");
segundo.style.marginLeft = (50 * coords[0]) + "px";
segundo.style.marginTop = (-50 * coords[1]) + "px";
}, 1000);
#reloj {
position:relative;
width:100px;
height:100px;
background:#eee;
border-radius:100%;
}
#reloj::before {
content:"";
position:absolute;
top:50%;
left:50%;
width:2px;
height:2px;
transform:translate(-50%, -50%);
background:black;
border-radius:100%;
}
#segundo {
position:absolute;
top:50%;
left:50%;
transform:translate(-50%, -50%);
width:3px;
height:3px;
background:red;
margin-top:-50px;
margin-left:0;
border-radius:100%;
}
<div id="reloj">
<div id="segundo"></div>
</div>
Чтобы мочь отвечать этот вопрос, представь, что часы - круг, чтобы знать координаты, - необходима функция лоно, и функция лоно нуждается в числе pi, и способ считать pi - посредством функции arcoseno.
Это статья о Числе pi в Wikipedia, в нем кладется формула, как считения pi посредством arcoseno.
Формула функции лона была бы этой.
Думая немного, имея в виду, что у полного возвращения круга есть 360 градусов, и что у часа есть 60 минут, я смог решать проблему, и кроме того это сделал таким образом, потому что не доверял стоимости функций стандарт javascript, не знали Ваш исходный код, должен будь быть где-то механизма V8 (Wikipedia), я захотел быть уверен давания правильной стоимости.
Конечный код был бы этим.
function asin(x)
{
var b=1,c=Math.pow,e=-1
a=x
for(var i=1;e!=a;i+=2)
{
e=a
b*=i/(i+1);a+=b*c(x,i+2)/(i+2)
}
return [a,(i-1)/2]
}
function pi()
{
return asin(1/2)[0]*6
}
function sin(d,f)
{
var a=0,b=1,c=Math.pow,e=-1,g=pi()
if(f=="deg"){d*g/180}
d-=2*g*Math.floor(d/(g*2))
for(var i=1;e!=a;i+=4)
{
e=a
a+=c(d,i+0)/b;b*=(i+1);b*=(i+2)
a-=c(d,i+2)/b;b*=(i+3);b*=(i+4)
}
return [a,(i-1)/4]
}
function reloj(minutos)
{
var ángulo=minutos/60*2*pi()
return [sin(ángulo)[0],sin(ángulo+pi()/2)[0]]
}
for(var i=7;i<60;i+=11)
{
var resultado = reloj(i)
console.log(
"minutos:", i,
", x: ", resultado[0],
", y: ", resultado[1]
)
}
Math.PI
, Math.sin
, и т.д. это не серьезная идея не доверять из функций стандарт javascript, так как они довольно проверены, конечно наиболее проверенный, чем любая другая, что ты или я смогли делать, кроме которого вероятно utilizen математический процессор CPU.
– rnrneverdies
22.09.2016, 20:55
Протестированный в Node.js:
var Log = require( 'console' ).log;
function point( min ) {
var rad = 2 * Math.PI * ( min / 60 ) - ( ( 2 * Math.PI ) / 4 );
return [ Math.cos( rad ), -Math.sin( rad ) ];
}
Log( point( 0 ) );
Log( point( 15 ) );
Log( point( 30 ) );
Log( point( 45 ) );
Log( point( 60 ) );
Я ИЗДАЮ
Подробное объяснение мозга темы: var rad = 2 * Math.PI * ( min / 60 ) - ( ( 2 * Math.PI ) / 4 );
2 * Math.PI * ( min / 60 )
Мы преобразовываем минуты в radianes. ( min / 60 )
он заканчивается нам градусами, эквивалентными указанным минутам. Чтобы это конвертировать в radianes (математические подразумеваемые функции, Math.sin
и Math.cos
, они работают с radianes, не с градусами), умножаются из-за 2Pi.
- ( ( 2 * Math.PI ) / 4 )
Функции seno
и coseno
периодические функции, с результатами, понятыми между-1 и 1, оба включенные ([-1, 1]). Это выражение готовит предыдущий результат (угол в radianes, который мы обрабатываем) для того, чтобы выводы Math.sin()
и Math.cos()
кажитесь нам полезными. Давайте говорить, что он взбирается на radianes для того, чтобы результат Math.sin()
и Math.cos()
влезьте в наше полное место окружности.
Я ИЗДАЮ 1, чтобы это приводить в соответствие в новую версию вопроса.
Объяснение, потому что возможная эта замена
Как я сказал ранее, seno( )
и coseno( )
это периодические функции, а именно, Ваша стоимость повторяется со временем. То, что мы не сказали, является Вашим периодом, что медлит с тем, чтобы повторять Ваша стоимость. В обоих случаях, Ваш период - PI / 2. Это давайте думать, что тщательно... тот же ранг стоимости результата... тот же период... это предлагает нам, что обе функции должны быть очень сходными, изменяя только перемещение на оси X из результата.
В этом таком забавном графике, взятом из Wikipedia, он оценивается совсем очень хорошо. Ось X представляет угол в radianes, в то время как ось Y представляет вывод функции (стоимость, которую он возвращает).
Шрифт: Wikipedia, Тригонометрия
Если мы смотрим график, это нам кажется совсем ясным:
Косинус угла (зеленая линия), это только лоно (красная линия) того же угла desfasado PI/2 radianes; а именно, косинус идет сзади; в моменте ввиду любого, это X лоно угла A, косинус - точно тот же самый, что лоно (В - (PI / 2)), оба в сияющих. В графике, оценивается ясно, что
seno( PI ) == 0
, что точноcoseno( PI / 2 ) == 0
. Равный для остальной стоимости. Если мы это делаем в градусах, косинус идет 45-ый за лоном.
Далее, так как у графика нет едва стоимости, я показываю какие-то, чтобы это подтверждать:
Градусы: 0, radianes: 0, лоно: 0, косинус: 1
Градусы: 45, radianes: 0.7854, лоно: 0.8509, косинус: 0.7071
Градусы: 90, radianes: 1.5708, тип лона: 0.894, косинус: 0
Градусы: 135, radianes: 2.3562, лоно: 0.0884, косинус:-0.7071
Градусы: 180, radianes: 3.1416, лоно:-0.8012, косинус:-1
Градусы: 225, radianes: 3.927, лоно:-0.9301, косинус:-0.7071
Градусы: 270, radianes: 4.7124, лоно:-0.176, косинус: 0
Градусы: 315, radianes: 5.4978, лоно: 0.7451, косинус: 0.7071
Градусы: 360, radianes: 6.2832, лоно: 0.9589, косинус: 1
Я ИЗДАЮ 2
Porqué не встречаются стоимость? согласно тираде раньше, они были бы должны совпадать: нет?
Я рекомендую hechar глаз в: Почему мои программы не могут делать арифметические вычисления правильно?
В этой таблице примера, кроме предыдущего, и поскольку мы будем видеть в коде, у части вины есть использование функции Number.toFixed( )
, от которого он отказывается десятичные. В этом конкретном случае, не происходит ничто, но..., если мы должны взбираться на результат (умножать это на какое-то число), неточность может быть достаточно большой как чтобы производить нежелательные устройства, прежде всего в графических темах.
КОНЕЦ ИЗДАЛ 2
Код в Node.js, очень простой, если кто-то хочет подтвердить это:
var log = require( 'console' ).log;
var grad,
rad;
for( grad = 0; grad < 365; grad += 45 ) {
rad = grad * Math.PI / 180;
log( "Grados: %d, radianes: %d, seno: %d, coseno: %d", grad, rad.toFixed( 4 ), Math.sin( grad ).toFixed( 4 ), Math.cos( rad ).toFixed( 4 ) );
}
Оценивается, что cos( 90º ) == 0
, что является точно тем же самым что sen( 0 ) == 0
; Выражение ранее, косинус угла - лоно angulo - PI/2
; или, сказанный о другой форме, косинусе var 45-ый сзади.
Уже мы знаем porqué возможная эта замена.
Ответ на новый вопрос.
Я говорю из-за меня, у остальных будут Ваши собственные ты размышляешь. Я использовал косинус porqué он что приходит во всех пример, который я увидел в Интернете. Мне не случилось делать это так, без косинуса ;-)
Я ИЗДАЮ 2
Имея в виду выставленную тему числовой точности больше достигни, оказывается, что, если есть мотив использовать косинус.
Давайте думать:
Тогда, coseno( X )
у него будет больше точность, которая seno( X - ( PI / 2 ) )
, в пользу простого мотива, которого второе использует 2 неясных числа, роди реализовывать вычисление, что увеличит неточность вывода.
Который ты сшил!
Простой: Тригонометрический круг
Понимая, что у твоих часов будет радио 1 в картезианской плоскости координат тогда, ты можешь использовать следующую функцию:
function cordenadas(minutos){
var radianes = (2 * Math.PI)/ 60 * minutos;
var x = Math.cos(radianes);
var y = Math.sin(radianes);
return [x, y];
}
если бы радио твоих часов было больше, просто ты умножаешь результат на радио.
Идея основана на тригонометрическом круге, мы знаем, что у окружности всегда будут два pi radianes.
Очевидно мы, должно быть, устанавливаем связь между минутами и тригонометрический, назначенный по умолчанию круг эта в pi radianes тогда мы, должно быть, конвертируем минуты в radianes.
Если ты нравишься использовать в другой системе координат, просто делается преобразование.