Canvas buldier c++

0

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.

1

Canvas->Pixels[X,Y];
Ale poprzez ScanLine jest szybciej ale bardziej skomplikowane.

0

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.

1

Wstań na Canvas, naciśnij <Ctrl-F1> zobacz jaki unit masz dołączyć.

ba952a8fca.png

0

Dałby ktoś jakieś wskazówki jak narysować wykres funkcji kwadratowej? W sensie jak wyliczyć x i y

1

Czego nie umiesz X*X ?

0

Dlaczego jak wpisze w builderze taką linijkę

  y=a(x-p)*(x-p)+q;

to wywala błąd Call of nonfunction

1

Ponieważ myśli że próbujesz wywołać funkcję a() - programowanie to nie matematyka nie ma znikającego znaku mnożenia.

0

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?

0

Rysowanie (przynajmniej kresek) jest Przemienne.

1

Użyj MoveTo() i LineTo()

0

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?

0

Lepszej dokładności niż pixel nie uzyskasz.

1

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.

0

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();

}
1

Rysujesz w OnPaint tego PaintBox'a zaś w konstruktorze:

__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
  PaintBox1->Invalidate(); 
}
0

Dokładnie tak samo jak w każdym innym miejscu.

0

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

1

Próbujesz dostać się do nie zarezerwowanego obszaru pamięci.

0

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.

0

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.

0

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ć.

0
 
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

0

Jak sprawdzić, które pola edit są złe, chce to sprawdzić by pokolorować je na inny kolor

1

Sprawdzaj w zdarzeniu OnChange i natychmiast zmieniaj kolor na dobry czy zły.

0

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

1
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.

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