Координаты иглы минутной стрелки

Я хочу знать, как себе делает функция в javascript, что возвратил координаты в определенной минуте. Центральные координаты - центр часов, так что это могут быть отрицания.

В Микрорабах я нашел ссылку, которая делает параллелизм, в которое я спрашиваю, это часы, которые дают тебе час в координатах.

Я тестирую деление или вычитание, но он не вытекает.

function(minutos)
{
    var x=0,y=0
    x=minutos*60
    y=x-12
    return [x,y]
}

Я издаю:

Смотря какие-то ответы я видел немного странно: Почему использовать косинус, если возможно извлекать в стоимости используя лоно?

Fórmula pi medio

36
задан 16.08.2017, 05:52
4 ответа

Согласно этой странице Гаме Девелопмент и этой другой из Mathematics (оба на английском), координаты точки могут быть вычисленными зная

  • Исходная точка (центр часов);
  • Дистанция, которую нужно пробегать (размер минутной стрелки); и
  • Угол (мы предполагаем 0 - правая сторона и уезжать отсюда мы продолжаем чувство стрелок часов)

Исходя из, что сориентировал его часов, у него есть координаты [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>
43
ответ дан 24.11.2019, 13:19

Чтобы мочь отвечать этот вопрос, представь, что часы - круг, чтобы знать координаты, - необходима функция лоно, и функция лоно нуждается в числе pi, и способ считать pi - посредством функции arcoseno.

Это статья о Числе pi в Wikipedia, в нем кладется формула, как считения pi посредством arcoseno.

introducir la descripción de la imagen aquí

Формула функции лона была бы этой.

introducir la descripción de la imagen aquí

Думая немного, имея в виду, что у полного возвращения круга есть 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]
  )
}
12
ответ дан 24.11.2019, 13:19
  • 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 представляет вывод функции (стоимость, которую он возвращает).

introducir la descripción de la imagen aquí

Шрифт: 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

Имея в виду выставленную тему числовой точности больше достигни, оказывается, что, если есть мотив использовать косинус.

Давайте думать:

  • угол X-> неясный.
  • PI-> неясный.

Тогда, coseno( X ) у него будет больше точность, которая seno( X - ( PI / 2 ) ), в пользу простого мотива, которого второе использует 2 неясных числа, роди реализовывать вычисление, что увеличит неточность вывода.

Который ты сшил!

7
ответ дан 24.11.2019, 13:19

Простой: Тригонометрический круг

introducir la descripción de la imagen aquí

Понимая, что у твоих часов будет радио 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.

Если ты нравишься использовать в другой системе координат, просто делается преобразование.

5
ответ дан 24.11.2019, 13:19

Теги

Похожие вопросы