Domanda

Sto cercando di capire i calcoli su questa demo raphael.js:

http://raphaeljs.com/pie.js

Controlla il metodo del settore:

function sector(cx, cy, r, startAngle, endAngle, params) {
    var x1 = cx + r * Math.cos(-startAngle * rad),
        x2 = cx + r * Math.cos(-endAngle * rad),
        y1 = cy + r * Math.sin(-startAngle * rad),
        y2 = cy + r * Math.sin(-endAngle * rad);
    return paper.path(["M", cx, cy, "L", x1, y1, "A", r, r, 0, +(endAngle - startAngle > 180), 0, x2, y2, "z"]).attr(params);
}

Questa è la demo vera e propria:http://raphaeljs.com/pie.html

I miei calcoli sono un po' arrugginiti e sto cercando di capire la funzione del settore: dati i parametri startAngle e endAngle (ogni punto iniziale e finale ha valori compresi tra 0 e 360 ​​che disegnano un arco), perché questa funzione funziona?

È stato utile?

Soluzione

Tutto dipende da come tratti startAngle E endAngle.Sembra che questo li stia trattando come se iniziassero dall'orizzontale verso destra (cioèun angolo di 0 punta a est) e procede in senso orario (quindi un angolo di 45 gradi punta a sud-est.

Solitamente in matematica si considerano gli angoli partendo dall'orizzontale verso destra, ma aumentando in senso antiorario...ma se chiedi a un non matematico di disegnare un angolo, potrebbe trattarlo dalla verticale verso l'alto (cioèNord) aumentando in senso orario.Sembra che stia prendendo una miscela :) Non esiste una risposta realmente "sbagliata" o "giusta" qui: è tutta una questione di definizione.

Poiché le immagini sono popolari, ecco i tre sistemi che ho descritto, ciascuno presupponendo che la linea sia lunga r:

Matematica normale:in senso antiorario dall'asse x

First diagram
(fonte: arachsys.com)

Chiedere all'uomo della strada di disegnare un angolo (in senso orario dall'asse y)

Second diagram

Gli angoli utilizzati da questo codice (in senso orario dall'asse x)

Third diagram

Altri suggerimenti

Basta guardare cosa sia il peccato e il cos in realtà Significare nel cerchio:alt text

Se hai un punto su un cerchio che forma un angolo alfa, il cos alfa è la parte x del punto e il sin alpha è la parte y.

Questa illustrazione spiega perché l'angolo è negato.alt text

Significa che ora puoi specificare senso orario angoli, che la maggior parte delle persone con orologi analogici preferisce.

Poiché il punto arbitrario sulla circonferenza con centro (cx, cy) e raggio R ha le seguenti coordinate (consegue direttamente dalle definizioni geometriche cos e sin - rapporto tra le lunghezze del cateto corrispondente e dell'ipotenusa):

x = cx + R*cos(a)
y = cy + R*sin(a) for  0 <= a < 2π

Quindi impostando i limiti sull'angolo a è possibile definire un arco arbitrario.

Se prendi 0° come orizzontale con x crescente e 90° come verticale con y crescente allora come:

cos(0) = 1
sin(0) = 0

cos(90) = 0
sin(90) = 1

puoi variare il valore x moltiplicandolo per il coseno e variare il valore y moltiplicandolo per il seno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top