[pascal] punkt ciezkosci (?)

0

Mam nadzieje, ze tak to sie fachowo nazywa :) Juz tlumacze.

Problem do rozwiazania w 2d (blacha), ale mozna tez zrobic to w 1d (drut). Mam tablice 2 wymiarowa (lub 1 wymiarowa dla drutu). Musze obliczyc gdzie znajduje sie taki punkt ze po polozeniu blachy w tym punkcie na jakims pionowym kiju ona nie spadnie.

Czy jest na to jakis wzor, algorytm? Szukalem w necie pod haslem "punkt przegiecia", ale nic nie udalo mi sie znalezc.

Jezeli chodzi o drut to chyba trzeba byloby znalezc taki punkt w tabeli ktory jest najblizszy sredniej elementow tej tabeli? Mam racje?

Pozdrawiam i prosze o pomoc

0

Jakie dane miały by sie znajdować w tych tablicach?
Jeśli blacha lub drut miały by być równej grubości to dla drutu
wystarczy jeden parametr opisujący jego rozmiary a mianowicie długość, no chyba ze drut nie byłby w kształcie lini prostej...

Myśle że z drutem nie byłoby większego problemu a z blachą trzebaby było troche pokombinować... :)

0

Aaj, zapomnialem najwazniejsze, wybacz :)

W tablicy z tego co rozumiem tresc zadania mialyby byc liczby ktore opisywalyby ciezkosc blachy w tym punkcie.

Jezeli wszedzie ciezkosc bylaby ta sama to wyznaczenie punktu ciezkosci dla blachy nie bylaby chyba problemem - na srodku - o ile dobrzer rozumuje :P

Dziekuje za zaangazowanie w sprawe :)

0

Domyślam sie że chodzi Ci po środek ciężkości wektora i macierzy dwuwymiarowej.

var v:array[n1..n2]of real;         // srodek cięzkosci tego wektora bedziemy wyznaczac
      ma:array[n1..n2,m1..m2]of real; // i tej macierzy
     i,j:integer;
     m,xv,xm,ym:real;
begin
{inicjalizacja tablicy ma i wektora v
}
m:=0;xv:=0;
for i:=n1 to n2 do begin 
                             m:=m+v[i]; xv:=xv+i*v[i];
                             end;
xv:=xv/m;// tu juz mamy srodek ciezkosci wektora v. Jesli wartosci w tablicy v byly nieujemne to: n1<= xv<=n2;

m:=0; xm:=0;ym:=0;
for i:=n1 to n2 do  
for j:=m1 to m2 do begin 
                               m:=m+ma[i,j]; xm:=xm+j*ma[i,j];
                               end;
                             xm:=xm/m;//druga współrzędna środka ciezkosci tablicy ma

for j:=m1 to m2 do
for i:=n1 to n2 do  ym:=ym+i*ma[i,j];
                             
                           ym:=ym/m; //pierwsza wspolrzedna srodka ciezkosci tablicy ma

Przepraszam , nie wiem dlaczego wyszło nierówno . Zawsze piszę "end" dokładnie pod odpowiadającym mu "beginem" a tu przy tym formatowaniu to sie poprzesuwało. Mam nadzieje, że jednak da sie to odczytać:)

0

To co ja zrobiłem, nie wiem jak sie nazywa :)
dla tablicy jednowymiarowej...

Kładziemy ListBox i Label

var drut: array [0..100] of byte;
    drut_caly: int64;
    drut_polowa: int64;
    i: integer;
begin

ListBox1.Clear;

for i:=0 to 100 do
BEGIN
drut[i]:=random(255);
ListBox1.Items.Add(IntToStr(drut[i]));
END;

drut_caly:=0;

for i:=0 to 100 do drut_caly:=drut_caly+drut[i];
drut_polowa:=drut_caly div 2;  // polowa srodka ciezkosci



drut_caly:=0;

for i:=0 to 100 do
  BEGIN
  drut_caly:=drut_caly+drut[i];
  if drut_caly>drut_polowa then
   BEGIN
   Label1.Caption:='Srodek ciezkosci w punkcie: '+IntToStr(i);
   Break;
   END;

  END;

end;
0

Sumujesz jedynie te wagi - otrzymujesz masę pręta... i połowę też. 8-O

Środek ciężkości jest zdefiniowany tak:

xs = suma(x*m[x])/M
M - masa całości = suma(m[x] po wszystkich x)

dla blachy (lub krzywego pręta) dochodzi nowy wymiar: y
xs = suma(xm[x,y])/M,
ys = suma(x
m[x,y])/M

w R3 dochodzi trzeci wymiar 'z'.

W przypadku ciągłym zamiast sum są całki.

0

Dzieki wielkie za pomoc. Program dziala jak powinien

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