Jak narysować sześcian na formatce?

Odpowiedz Nowy wątek
2015-01-02 13:04
0

Witam, jestem bardzo poczatkujący w progrmowaniu, mam do napisania pewien kalkulator obliczający wytrzymałość, mam już prawie całość ale chce aby bardziej 'cieszył oko' i wpadłem na pomysł by po wprowadzeniu wartosci (Długość szerokość i wysokość) rysował sześcian, ale aby tez miał pewne zabezpieczenia w sensie aby się skalował w stosunku do wymiarów okienka gdzie będzie wyświetlany. Póki co wkleiłem chamsko zdjęcie, mam nadzieję, ze ktos naprowadzi mnie jak to zrobić, funkcją Canvas? tylko jak ;<

Pozostało 580 znaków

2015-01-02 13:45
lopki23
0

No sześcianu nie 'wstawiłeś' tylko otwarty karton?

myślę że sześcian Canvasem dasz radę narysować w miarę szybko, poszuka przykładów w sieci, co do 'otwartego pudła' to już więcej rzeźbienia.

Pozostało 580 znaków

2015-01-02 13:49
2

Najprościej będzie narysować sześcian w takiej formie:
http://www.matmana6.pl/zdjeci[...]_stereometria/szescian_39.png

Szerokość i wysokość po prostu skalujesz, natomiast głębokość może być przekładana na przesunięcie po skosie w górę i w prawo, współczynniki dobierz sam, żeby wyglądało naturalnie. Najlepiej oblicz położenie wszystkich punktów sześcianu na płaszczyźnie uwzględniając przesunięcie w głąb jako przesunięcie na ukos. Wtedy łatwo będzie obliczyć wysokość i szerokość całego rysunku, a mając wymiary rysunku i wymiary pola przewidzianego na ten rysunek obliczysz współczynnik, przez który pomnożysz współrzędne każdego z punktów rysunku, co spowoduje jego zmniejszenie lub powiększenie, żeby zmieścił się w polu przewidzianym na ten rysunek.

Oczywiście przy użyciu TBitmap.Canvas, jednak przypominam, że to powinno być na osobnym obiekcie typu TBitmap, który będzie wyświetlany. Jak będziesz rysować bezpośrednio na formatce, to rysunek będzie ulotny, zniknie po zminimalizowaniu lub zasłonięciu okna aplikacji.

Pozostało 580 znaków

2015-01-02 13:50
0

chodziło by mi o zwykły sześcian, bez udziwnień :D wlaśnie próbuje coś canvasami zrobć ale mozolnie mi to idzie

Pozostało 580 znaków

2015-01-02 13:53
2

bbe229cd8e.png

  1. Oblicz sobie punkty zaznaczone czerwonym.
  2. Znajdź: Mx=min(Points[i].x) i My=min(Points[i].y)
  3. Odejmij od każdej współrzędnej Mx, My
  4. Znajdź: Mx=max(Points[i].x) i My=max(Points[i].y) dla już przeliczonych punktów.
  5. Wylicz zoom=min(MaxBoxWidth/Mx,MaxBoxHeight/My)
  6. Przelicz każdą współrzędną Points[i].x=Margin+Points[i].x*zoom oraz Points[i].y=Margin+Points[i].y*zoom

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon, 2015-01-02 13:56

Pozostało 580 znaków

2015-01-02 13:55
0

_13th_Dragon - brak obrazka ;)
Edit.1
Podoba mi się Twój pomysł, bo mogę swtorzyć coś jeszcze lepszego ;)Przy pomocy CAD'a ściągnąłem punkty, i wyglada to jak na zdjęciu (wartosci mogę odczytac bez problemu) tylko nie bardzo wiem co oznaczają Mx i My

Znajdź: Mx=min(Points[i].x) i My=min(Points[i].y)
Odejmij od każdej współrzędnej Mx, My

mając wartości x,y (punkty) jak je wkleić do kodu aby to sie narysowało?:)

edytowany 1x, ostatnio: daro1337, 2015-01-02 14:12

Pozostało 580 znaków

2015-01-02 14:21
0
  1. Nic ci nie da ściągnięcie punktów z CAD'a ponieważ punkty trzeba wyliczyć dla konkretnych podanych H, B, L
  2. Mx/My obliczane są ze wszystkich wyliczonych punktów

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2015-01-02 14:23
0

To z moją wiedzą bardziej możliwe będzie wykonanie Canvasami, ale dzięki za podpowiedź ;)

Pozostało 580 znaków

2015-01-02 14:26
0

No właśnie po tym co napisałem to rysujesz za pomocą Canvas.Polygon: http://docwiki.embarcadero.co[...]/Vcl.Graphics.TCanvas.Polygon
Algorytm podałem na obliczenie skalowania, tak aby się zmieściło w wyznaczonym obszarze.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon, 2015-01-02 16:04
Poprawione, szybciej byś ta literkę sam poprawił ;P - _13th_Dragon 2015-01-02 16:04

Pozostało 580 znaków

2015-01-02 14:45
rebejojo
0

nie wiem jaką wersję delphi posiadasz ale w firemonkey robisz coś takiego bez linijki kodu ;)

Pozostało 580 znaków

2015-01-02 14:47
0

delphi 7, mozesz przybliżyc Twoja wersje?

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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