2016-10-20 35 views
0

我有一些舊的QuickBasic代碼(是的,真的),我正在使用JavaScript重寫。在QuickBasic圓的定義,像這樣:在JavaScript中如何寫這個基本的圈子聲明?

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

在JavaScript中的HTML5畫布,像這樣的:

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

正如人們所看到的,聲明非常相似 - 除了的QuickBasic具有顏色和外觀的參數。

我可以使用context.strokeStyle處理顏色,但我不確定如何處理該方面?我會用什麼JavaScript命令來完成QuickBasic通過aspect參數所描述的類似效果?

在這種情況下方面可以被定義爲:

「的0至1 SINGLE值影響的垂直高度和值超過1影響的橢圓的水平方向的寬度寬= 1是一個正常的圓形。 「 - QB64 Wiki

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

+1

的可能的複製[如何繪製在HTML5畫布橢圓?](http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in -html5-canvas)請注意,將'CIRCLE'的'aspect'參數設置爲1以外的值使得它繪製一個橢圓而不是圓。 – duskwuff

+0

使用'ctx.scale'設置方面,'ctx.arc'來創建路徑。在渲染之前,將比例尺恢復爲平方,然後調用'ctx.stroke'。如果你沒有將比例尺恢復到正方形,線條寬度將在弧上變化。 – Blindman67

回答

2

下面是使用JavaScript橢圓的圓函數,垂直和水平爲方面的效果。

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

想說「只在鉻上」,但是快速檢查並且看起來像大3(firefox,chrome,edge)現在都支持橢圓。耶常識和你最後可用的'ctx.ellipse'函數... + 1 – Blindman67

+0

非常感謝!我發佈它已經有一段時間了,但這正是我需要的......項目最終被擱置了一段時間,但我現在回來了。 – davemackey