2016-10-20 6 views
0

У меня есть старый код QuickBasic (да, действительно), над которым я работаю над переписыванием в JavaScript. В QuickBasic круг определяется следующим образом:Как можно написать это заявление BASIC Circle в JavaScript?

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

В JavaScript на холсте HTML5, как так:

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

Как видно, высказывания довольно похожи - за исключением того, что QuickBasic имеет параметры для цвета и аспект.

Я могу использовать context.strokeStyle для обработки цвета, но я не уверен, как обращаться с этим аспектом? Какую команду JavaScript я использовал бы для достижения аналогичного эффекта, как описано в QuickBasic через параметр аспекта?

В этом случае аспекте может быть определен как:.

«SINGLE значение от 0 до 1 влияет на вертикальную высоту и значение более 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) Обратите внимание, что установка параметра 'aspect'' CIRCLE' в значение, отличное от 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), все теперь поддерживают эллипс , Yay для здравого смысла и привет, наконец, используемая функция 'ctx.ellipse' ... + 1 – Blindman67

+0

Большое спасибо за это! Прошло некоторое время с тех пор, как я опубликовал его, но это именно то, что мне нужно ... проект оказался немного отложенным, но теперь я вернусь к нему. – davemackey

 Смежные вопросы

  • Нет связанных вопросов^_^