2016-10-20 3 views
0

Ich habe einige alte QuickBasic-Code (ja, wirklich), dass ich arbeite in JavaScript umschreiben. In Quickbasic ist ein Kreis wie so definiert:Wie könnte man diese BASIC Circle-Anweisung in JavaScript schreiben?

CIRCLE (column, row), radius, color, startRadian, stopRadian, aspect

in JavaScript auf den HTML5-Canvas wie so:

c.arc(column, row, radius, startAngle, endAngle, counterclockwise);

Wie man sehen kann, sind die Aussagen ziemlich ähnlich sind - außer, dass Quickbasic hat Parameter für Farbe und Aspekt.

Ich kann context.strokeStyle verwenden, um die Farbe zu behandeln, aber ich bin unsicher, wie man mit dem Aspekt umgehen soll? Mit welchem ​​JavaScript-Befehl würde ich einen ähnlichen Effekt erzielen, wie er von QuickBasic über den aspect-Parameter beschrieben wird?

In diesem Fall Aspekte wie folgt definiert werden kann:.

„SINGLE-Werte von 0 bis 1, um die vertikale Höhe und Wert über 1 beeinflussen die horizontale Breite einer Ellipse beeinflussen Aspect = 1 ist ein normaler Kreis. " - QB64 Wiki

1http://www.qb64.net/wiki/index.php?title=CIRCLE

+1

Mögliche Duplikat [Wie ein Oval in html5 Leinwand zeichnen?] (Http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in -html5-canvas) Wenn Sie den 'aspect' Parameter von' CIRCLE' auf etwas anderes als 1 setzen, wird ein Oval anstelle eines Kreises gezeichnet. – duskwuff

+0

Verwenden Sie 'ctx.scale', um den Aspekt festzulegen,' ctx.arc', um den Pfad zu erstellen. Bevor Sie die Darstellung wiederherstellen, stellen Sie die Skalierung auf "Quadrat" zurück und rufen Sie dann "ctx.stroke" auf. Wenn Sie die Skala nicht auf den quadratischen Aspekt wiederherstellen, wird die Linienbreite über den Bogen variieren. – Blindman67

Antwort

2

Hier ist eine CIRCLE JavaScript-Funktion Ellipse, dass die Auswirkungen vertikale und horizontale für Aspekt verwendet wird.

var can = document.getElementById('can'); 
 
var ctx = can.getContext('2d'); 
 
var w = can.width; 
 
var h = can.height; 
 
var x = w/2; 
 
var y = h/2; 
 
var radius = 30; 
 
var startAngle = 0; 
 
var endAngle = Math.PI*2; 
 
var color = 'red'; 
 

 
CIRCLE(x, y, radius, color, startAngle, endAngle, .5); 
 
CIRCLE(x+10, y+10, radius, 'blue', startAngle, endAngle, 1.5); 
 

 
function CIRCLE (column, row, radius, color, startRadian, stopRadian, aspect) { 
 
    var rotation = 0; 
 
    var anticlockwise = 0; 
 
    
 
    if (aspect == 1) { 
 
    var rx = radius; 
 
    var ry = radius; 
 
    } else if(aspect < 1) { 
 
    var rx = radius * aspect; 
 
    var ry = radius; 
 
    } else if(aspect > 1) { 
 
    var rx = radius; 
 
    var ry = radius * (aspect-1); 
 
    } 
 
    
 
    ctx.fillStyle=color; 
 
    ctx.beginPath(); 
 
    ctx.ellipse(x, y, rx, ry, rotation, startAngle, endAngle, anticlockwise); 
 
    ctx.fill(); 
 
}
<canvas id='can' width='200' height='150'></canvas>

+1

Ich würde sagen "nur auf Chrom", aber eine schnelle Überprüfung und sieht aus wie die großen 3 (Firefox, Chrom, Kante) alle unterstützen jetzt Ellipse . Yay für den gesunden Menschenverstand und Hallo zur endlich benutzbaren 'ctx.ellipse' Funktion ... + 1 – Blindman67

+0

Vielen Dank dafür! Es ist eine Weile her, seit ich es gepostet habe, aber das ist genau das, was ich brauche ... das Projekt wurde für ein bisschen beiseite gelegt, aber ich bin jetzt wieder da. – davemackey

Verwandte Themen