Wyrażenie regularne z pola input

0

Siema,
Ostatnio chciałem stworzyć taki mini program do rysowania funkcji liniowej i chcę zrobić to w taki sposób, że jeśli do pola input wpisze jakiś wzór funkcji liniowej to go program narysuje.
Tylko w jaki sposób pobrać z inputa współczynnik kierunkowy i wyraz wolny np: 2x+6? Chcę pobrać z inputa 2 przy x i 6 (wyraz wolny), a następnie podstawić do wzoru czyli do a i b.

function Function(a, b) {
        input.value = a + "x+" + b;
        for (var x = -(1000); x < 1000; x += rangex) {

            var y = Math.floor((a * x) + b * (-range))
            ctx.lineTo(x, y);
            ctx.stroke();

        }
    }

Z góry dzięki za pomoc.

1

To nie jest takie proste, bo o ile samo przetworzenia wprowadzonego tekstu jest łatwe, to problemem może być osoba program obsługująca. Czy chcesz uwzględniać tylko jeden typ funkcji/wykresu, czy może ich być więcej? Czy parametry funkcji mogę być ułamkami, być ujemne, być zerem itp?

Nie wiem, czy bezpieczniej nie będzie zrobić kilku osobnych pól, jedno na parametr A, drugie na B itp.

0

Właśnie myślałem, żeby zrobić kilka pól na parametry A i B, ale chciałem sobie trochę można powiedzieć utrudnić zadanie. Druga rzecz, gdybym chciał poszerzyć możliwości programu czyli wdrożyć więcej funkcji to w jaki sposób ogarnąć to, że jeśli pojawi się wyrażenie z kwadratem to zostanie zastosowana inna funkcja?

1

W JS możesz wykonywać kod który pochodzi ze stringów np. za pomocą eval albo new Function, może to Ci pomoże ;) Wtedy użytkownik mógłby podawać np. 2x+2, musiałbyś wykryć, że przed x jest liczba i dodać znak mnożenia tj. 2 * x + 2 - a potem za pomocą eval możesz taki kod wykonać. Wtedy użytkownik mógłby wprowadzić np. 1/2x+5+2+10x+2x i Twój program nadal by działał.

0

Takie pomysły mogą się skończyć pisaniem własnego parsera. Wtedy punktem wyjścia jest Bison

0

Jeśli będzie ograniczony zestaw funkcji do rysowania, to możesz zrobić jakieś pole wyboru i w zależności od tego, co użytkownik wybierze, wyświetlić odpowiednie pola na formularzu.

0

Ok, wykonałem kod z inputa za pomoca eval(). Wyrażenia określone za pomocą wzoru z funkcji liniowej działają. Teraz wziąłem się za funkcje kwadratową tylko napotkałem kolejny problem. Jeśli użytkownik wpiszę do inputa x^2 to zamieniam to jako x*x tylko, jeśli użyje przekształcenia funkcji za pomocą translacji np: (x+p)^2
to nie działa to prawidłowo, ponieważ używam skali = 15 Musiałbym wpisać

(x+p*15)^2

, żeby przesunęło wg wzoru tzn: w lewo o p jednostkę (w rzeczywistości o 15*p bo narzucam skale). Reasumując, chce osiągnąć to, że jeśli mam wzór
(x+p)^2+q
to p i q zostaną pomnożone przez skale. W jaki sposób to można to zrealizować?

0

Up

1 użytkowników online, w tym zalogowanych: 0, gości: 1