Witam. Mam zamiar zrobić projekt który rysuje wykres funkcji kwadratowej. W związku z tym mam pytanie czy dobrze jest użyć funkcji
Canvas->Pixels[X][Y];
czy może jest jakiś inny sposób? Jak będzie najwygodniej?
Mam na myśli jakiś prosty sposób.
Witam. Mam zamiar zrobić projekt który rysuje wykres funkcji kwadratowej. W związku z tym mam pytanie czy dobrze jest użyć funkcji
Canvas->Pixels[X][Y];
czy może jest jakiś inny sposób? Jak będzie najwygodniej?
Mam na myśli jakiś prosty sposób.
Canvas->Pixels[X,Y];
Ale poprzez ScanLine jest szybciej ale bardziej skomplikowane.
A jak to jest bo mam w projekcie 2 pliki cpp w pierwszym funkcja
Canvas->Pixels[X,Y];
działa natomiast w drugim wywala błąd. Nie deklarowałem w pierwszym pliku żadnych nowych bibliotek.
Wstań na Canvas, naciśnij <Ctrl-F1> zobacz jaki unit masz dołączyć.
Dałby ktoś jakieś wskazówki jak narysować wykres funkcji kwadratowej? W sensie jak wyliczyć x i y
Czego nie umiesz X*X ?
Dlaczego jak wpisze w builderze taką linijkę
y=a(x-p)*(x-p)+q;
to wywala błąd Call of nonfunction
Ponieważ myśli że próbujesz wywołać funkcję a()
- programowanie to nie matematyka nie ma znikającego znaku mnożenia.
A jak rysuje ten wykres to mam się ustawić na środku wykresu i względem niego rysować czy ustawić się w punkcie x1 i rysować do wierzchołka funkcji i do x2, jak będzie lepiej?
Rysowanie (przynajmniej kresek) jest Przemienne.
Użyj MoveTo()
i LineTo()
Co muszę zrobić by wykres był rysowany z większą dokładnością?
y dzielić przez 100 a co z x?
Czy może jakimś innym sposobem?
Lepszej dokładności niż pixel nie uzyskasz.
Musisz odpowiednio wyśrodkować wykres.
Na wykresie wypada mieć punkt 0,0 oraz p,q oraz punkty przecięcia z osiami.
Znajdź z tych wszystkich punktów minX,maxX,minY,maxY
Na postawie tych 4-ch liczb ustal skalowanie i przesunięcie.
Jak zrobić żeby nie trzeba było naciskać na pole PaintBox by narysowały się współrzędne? Tylko po uruchomieniu programu były już narysowane.
Napisałem coś takiego:
Form1->PaintBox1->wspolrzedne();
ale wywala błąd wspolrzedne() is not a member of 'TPaintBox'
Tak też nie działa:
```cpp
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
wspolrzedne();
}
Rysujesz w OnPaint tego PaintBox'a zaś w konstruktorze:
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
PaintBox1->Invalidate();
}
Dokładnie tak samo jak w każdym innym miejscu.
Co to są za błędy? (załącznik)
Pokazują się po kompilacji programu, jak się już program uruchomi.
Pojawiły się w takiej kolejności jak mają numerki na zrzucie
Próbujesz dostać się do nie zarezerwowanego obszaru pamięci.
StrToFloat
a nie StrToFloatDef
funkcja StrToFloatDef
przyjmie wartość domyślną (w tym przypadku 0) jeżeli nie uda się konwersja tego co podano pierwszym w parametrze i nie wywoła wyjątku.
Najprostszy sposób:
AnsiString Text=edit->Text;
int SelStart=edit->SelStart,SelLength=edit->SelLength;
try
{
StrToFloat(edit->Text);
}
catch(...)
{
edit->Text=Text;
edit->SelStart=SelStart;
edit->SelLength=SelLength;
MessageBeep(MB_ICONASTERISK);
}
I nie dawaj żadnych komunikatów.
Nie wiem kiedy zrozumiesz że programowanie metodą prób i błędów z góry skazane na porażkę.
Z powyższego kodu widać że nie rozumiesz najprostszych podstaw.
Jakiś kurs do ręki i czytać.
try
{
StrToFloat(edit->Text);
}
catch(...)
{
if (edit->Text == 0)
ShowMessage("<>0");
else
ShowMessage("inny blad");
}
poprawiłem na cos takiego, ale i tak jeszcze nie działa do konca
Jak sprawdzić, które pola edit są złe, chce to sprawdzić by pokolorować je na inny kolor
Sprawdzaj w zdarzeniu OnChange i natychmiast zmieniaj kolor na dobry czy zły.
Jak zabezpieczyć pole edit przed wpisaniem -0 ? Mam coś takiego, ale niestety nie działa ;(
if ((edit->Text != 0) && (edit->Text != -0))
Dla 0 działa natomiast dla -0 już nie
if((a->Text!="0")&&(a->Text!="-0"))
Ale nie rób takich głupot, ponieważ jak będzie wpisano -10 i użytkownik skasuje 1 aby wpisać 2 (chce mieć -20) to szlak go trafi z twoimi zabezpieczeniami.