Próba kodowania beziera beziera w javascript na płótnie dla projektu. Chcę, aby użytkownik mógł nacisnąć przycisk, w tym przypadku "b", aby wybrać każdy punkt końcowy i punkty kontrolne. Do tej pory jestem w stanie uzyskać współrzędne myszy przy naciśnięciu klawisza i tworzyć krzywe kwadratowe i beziera za pomocą wbudowanych funkcji. W jaki sposób chciałbym wykonać kod dla n-tego rzędu?Jak zakodować n-tego rzędu Krzywa Beziera
Odpowiedz
Oto realizacji JavaScript nth porządkowych krzywych Beziera:
// setup canvas
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
canvas.height = window.innerHeight;
canvas.width = window.innerWidth;
ctx.fillText("INSTRUCTIONS: Press the 'b' key to add points to your curve. Press the 'c' key to clear all points and start over.", 20, 20);
// initialize points list
var plist = [];
// track mouse movements
var mouseX;
var mouseY;
document.addEventListener("mousemove", function(e) {
mouseX = e.clientX;
mouseY = e.clientY;
});
// from: http://rosettacode.org/wiki/Evaluate_binomial_coefficients#JavaScript
function binom(n, k) {
var coeff = 1;
for (var i = n - k + 1; i <= n; i++) coeff *= i;
for (var i = 1; i <= k; i++) coeff /= i;
return coeff;
}
// based on: https://stackoverflow.com/questions/16227300
function bezier(t, plist) {
var order = plist.length - 1;
var y = 0;
var x = 0;
for (i = 0; i <= order; i++) {
x = x + (binom(order, i) * Math.pow((1 - t), (order - i)) * Math.pow(t, i) * (plist[i].x));
y = y + (binom(order, i) * Math.pow((1 - t), (order - i)) * Math.pow(t, i) * (plist[i].y));
}
return {
x: x,
y: y
};
}
// draw the Bezier curve
function draw(plist) {
ctx.clearRect(0, 0, canvas.width, canvas.height);
var accuracy = 0.01; //this'll give the 100 bezier segments
ctx.beginPath();
ctx.moveTo(plist[0].x, plist[0].y);
for (p in plist) {
ctx.fillText(p, plist[p].x + 5, plist[p].y - 5);
ctx.fillRect(plist[p].x - 5, plist[p].y - 5, 10, 10);
}
for (var i = 0; i < 1; i += accuracy) {
var p = bezier(i, plist);
ctx.lineTo(p.x, p.y);
}
ctx.stroke();
ctx.closePath();
}
// listen for keypress
document.addEventListener("keydown", function(e) {
switch (e.keyCode) {
case 66:
// b key
plist.push({
x: mouseX,
y: mouseY
});
break;
case 67:
// c key
plist = [];
break;
}
draw(plist);
});
html,
body {
height: 100%;
margin: 0 auto;
}
<canvas id="canvas"></canvas>
ta opiera się na this implementation of cubic Bezier curves. W twojej aplikacji brzmi to tak, jakbyś chciał wypełnić tablicę points
punktami zdefiniowanymi przez użytkownika.
Dziękuję. Pytanie uzupełniające: jaki jest najlepszy sposób dodawania punktów zdefiniowanych przez użytkownika? Eksperymentowałem przez ostatni dzień, ale nie wymyśliłem niczego, co działa. Chcę tylko, aby użytkownik nacisnął "b", a następnie narysuje po każdym naciśnięciu, aby dwukrotnie nacisnąć "b" dla linii, 3 dla kwadratu itd. – Adam
[Tutaj jest skrzypce] (http: // jsfiddle .net/rphv/3jkt16Ly/3 /), które mogą pomóc. Dodaje nowy punkt pod wskaźnikiem myszy po naciśnięciu klawisza "b" i czyści listę punktów po naciśnięciu "c". Wyświetla również punkty (numbererd), gdy są dodawane. Aby to zrobić, odświeżyłem kod rysunku do jego własnej funkcji 'draw()', przeniosłem 'plist' do zasięgu globalnego i dodałem detektor' mousemove' do śledzenia pozycji myszy. Proszę rozważyć umieszczenie powyższej odpowiedzi, jeśli to pomogło. – rphv
Dziękuję bardzo! Chciałbym przegłosować, gdybym mógł, ale nie pozwoli mi jeszcze powód rep. Moje konto jest bardzo nowe – Adam
- 1. Krzywa Beziera Krzywa: Maksymalne unikanie kolizji i kolizji?
- 2. Obszar roboczy: Animowany rysunek krzywa beziera
- 3. n-ty porządek Krzywe Beziera?
- 4. Jak poprawnie zakodować link mailto?
- 5. Jak prawidłowo zakodować akcenty kodujące?
- 6. Jak zakodować regułę impasu szachów?
- 7. Jak zakodować DropDownButton w Javie
- 8. Ścieżka beziera poszerzająca
- 9. Jak animować rysunek krzywa z płótna?
- 10. Jak krzywa balon ogon (prosty kształt trójkąta)
- 11. Niezormalizowana krzywa Gaussa na histogramie
- 12. SciPy globalna minimalna krzywa pasuje
- 13. Jak narysować krzywą Beziera w Androidzie
- 14. Szerokość TextView po krzywa ImageView
- 15. Pomoc w analizie, jak program/program konstruuje krzywą Beziera
- 16. orzecznik zakodować w prologu
- 17. Czy można zakodować Haskell?
- 18. Jak ustawić obraz dla rzędu?
- 19. Jak zakodować '/' w ASP.NET MVC Razor
- 20. Jak URL zakodować URL w JSP?
- 21. Jak poprawnie zakodować rekursywną obietnicę jquery
- 22. Jak zakodować zmienną kategoryczną w sklearn?
- 23. Jak zakodować nazwę pliku do pobrania?
- 24. Jak zakodować ciąg dartów w base64?
- 25. Jak zakodować wartość za pomocą serializacji jquery?
- 26. Jak zakodować zielony przycisk w arkuszu UIActionSheet?
- 27. Jak zakodować względną krótkie JMP w x86
- 28. Jak zakodować plik wykonywalny na ścieżce Linux?
- 29. Angular-chart.js - aby wykres liniowy nie krzywa
- 30. Beziera Cubic Krzywe: przeniesienie z jednolitego przyspieszenie
Utwórz tablicę i zapisz każdą linię w niej. – user2072826