Helion Bestsellery

Cyberbezpieczeństwo dla bystrzaków. Wydanie II
  • Autor: Joseph Steinberg
  • Zniżka: 35%
  • Cena: 69.00 44.85 zł
  • Marka: Helion
  • Status: Dostępna
  • Typ: Książka
  • EAN: 9788383222868
  • ISBN: 978-83-8322-286-8
Dodaj Cyberbezpieczeństwo dla bystrzaków. Wydanie II do koszyka

Helion Książka Dnia

Algorytmy w Pythonie. Techniki programowania dla praktyków
  • Autor: Piotr Wróblewski
  • Zniżka: 50%
  • Cena: 119.00 59.50 zł
  • Marka: Helion
  • Status: Dostępna
  • Typ: Książka
  • EAN: 9788328393684
  • ISBN: 978-83-283-9368-4
Dodaj Algorytmy w Pythonie. Techniki programowania dla praktyków do koszyka

arcTo()

[ Leksykon ] [ JavaScript ] [ Metody ] [ Właściwości ] [ canvas ] [ CanvasRenderingContext2D ]

CanvasRenderingContext2D.arcTo()

[_] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [Q] [R] [S] [T] [U] [V] [W] [X] [Y] [Z]

arcTo(x1, y1, x2, y2, radius)

 

Przykłady:

<script>

window.onload = () => {

const szer = 600;
const wys = 300;

const canvas = document.getElementById("canvas");
canvas.width = szer;
canvas.height = wys;
const ctx = canvas.getContext("2d");

const wartoscStartowa = document.getElementById("promien-start");
const suwak = document.getElementById("promien");
suwak.oninput = () => {
wartoscStartowa.textContent = promien = suwak.value;
};

const punktA = { x: 300, y: 200 };
const punktB = { x: 350, y: 150 };
const punktC = { x: 400, y: 200 };

let promien = suwak.value;

function zadaniePunktTXT(punkt, xy, txt) {
const { x, y } = xy;
ctx.beginPath();
ctx.arc(punkt.x, punkt.y, 2, 0, Math.PI * 2);
ctx.fill();
ctx.fillText(`${txt}:(${punkt.x}, ${punkt.y})`, punkt.x + x, punkt.y + y);
}

function zadaniePunkt(punkty) {
punkty.forEach((punkt, i) => {
zadaniePunktTXT(punkt, { x: 10, y: 0 }, `punkt ${i+1}`);
});
}

function zadanieArc([punktA, punktB, punktC], r) {
ctx.beginPath();
ctx.moveTo(punktA.x, punktA.y);
ctx.arcTo(punktB.x, punktB.y, punktC.x, punktC.y, r);
ctx.lineTo(punktC.x, punktC.y);
ctx.stroke();
}

function zadanieA(r) {

const punktA = { x: 340, y: 49 };
const punktB = { x: 120, y: 280 };
const punktC = { x: 49, y: 49 };

const opisPunktu = (punkt) => {
ctx.fillText(`(${punkt.x},${punkt.y})`, punkt.x + 20, punkt.y + 10);
};

ctx.beginPath();
ctx.moveTo(punktA.x, punktA.y);
ctx.arcTo(punktB.x, punktB.y, punktC.x, punktC.y, r);
ctx.lineTo(punktC.x, punktC.y);

opisPunktu(punktA);
opisPunktu(punktB);
opisPunktu(punktC);

ctx.stroke();

}

function praca(t) {

const angle = (t / 1000) % (2 * Math.PI);
const r = Math.abs(Math.cos(angle) * promien);

ctx.clearRect(0, 0, canvas.width, canvas.height);

zadanieArc([punktA, punktB, punktC], r);
zadaniePunkt([punktA, punktB, punktC]);

ctx.fillText(`ABC "${(r)}"`, 290, 250 - (Math.cos(angle) * promien));

zadanieA(r);
requestAnimationFrame(praca);

}

praca(0);

};

</script>

<canvas id="canvas" width="1" height="1"></canvas>
<div>
<label for="promien">Promień: </label>
<input name="promien" type="range" id="promien" min="0" max="250" value="30" />
<label for="promien" id="promien-start">30</label>
</div>

 

  

Opis:
Metoda CanvasRenderingContext2D.arcTo() dodaje łuk kołowy do bieżącej ścieżki podrzędnej, wykorzystując podane punkty kontrolne i promień. Łuk jest automatycznie łączony z ostatnim punktem ścieżki linią prostą, jeśli jest to konieczne dla określonych parametrów. Parametry x1 - współrzędna osi x pierwszego punktu kontrolnego, y1 - współrzędna osi Y pierwszego punktu kontrolnego, x2 - współrzędna osi x drugiego punktu kontrolnego, y2 - współrzędna osi Y drugiego punktu kontrolnego, radius - promień łuku. Musi być nieujemny.

Zobacz też:

 

 

 

 

 

Please publish modules in offcanvas position.