szukanie zaawansowane
 [ Posty: 16 ]  Przejdź na stronę 1, 2  Następna strona
Autor Wiadomość
Mężczyzna Offline
PostNapisane: 2 wrz 2010, o 08:39 
Użytkownik

Posty: 8
Lokalizacja: Kielce
Witam.

Nie ukrywam że to już kiedyś było i w podstawówce były piątki, ale matematyka nie używana zanika :), więc proszę o pomoc. Pisze prezentację w Delphi i cały dzień spędziłem nad wzorem i ni w ząb go ugryźć nie potrafię. Opisze dokładnie bo gdzieś mam błąd w rozumowaniu i nie wiem gdzie.

Układ współrzędnych to lewy górny róg (0,0) i lecąc w dół Y rośnie, lecąc w prawo X rośnie, czyli akcja rozgrywa się głównie w IV ćwiartce o ile dobrze pamiętam.
Mam elipsę, koło, lub dowolną figurę oraz punkt w jej wnętrzu lub poza nią;
czyli:
1. jest A(x_0,y_0) np (100,200) i on jest nie jest środkiem układu współrzędnych, ale wierzchołkiem kąta.
2. mam punkt B(x_b,y_b)np. (150,200),x_b>x_0 leżący zawsze po prawej od A na takiej samej wysokości
3. mam dowolny C (x_c, y_c), który jest punktem leżącym na obwodzie figury, a więc może być wszędzie: np. C(130, 160) lub C(-10, 270)

4. Pamiętając, że A jest wierzchołkiem poszukuję wartości kąta CAB:
a) w stopniach;
b) w radianach;
5. fajnie by było jakby jeszcze był jakiś wzór na przeliczanie na stopnie bo wolałbym nie używać tablicy matematycznej.

Żeby nie było że nic nie zrobiłem i idę na łatwiznę to mam wyliczenie wartości sinusa kąta Alfa
ale:
- jak go przekształcić na radiany i na stopnie - chyba ze ta wartość to radiany,

Mam że sin \alpha= \frac{|AC|}{|y_0-y_c|}, i podaje mi że to 0.9397 co daje 70^{O} ale mi potrzebne radiany i stopnie nie wyciągane z tablicy a wyliczane.
Góra
Mężczyzna Offline
PostNapisane: 2 wrz 2010, o 08:58 
Użytkownik
Avatar użytkownika

Posty: 4105
Lokalizacja: Poznań
Integer napisał(a):
Układ współrzędnych to lewy górny róg (0,0) i lecąc w dół Y rośnie, lecąc w prawo X rośnie, czyli akcja rozgrywa się głównie w IV ćwiartce o ile dobrze pamiętam.

Stosujesz prawoskrętny układ współrzędnych (w dodatku obrócony). I to jest I ćwiartka (w końcu x i y sa dodatnie)

-- 2 wrz 2010, o 10:04 --

Integer napisał(a):
4. Pamiętając, że A jest wierzchołkiem poszukuję wartości kąta CAB:
a) w stopniach;
b) w radianach;

Idealnie nadaje się do tego iloczyn skalarny (znajdujesz cosinus kąta, potem stosujesz arcos(x))
Integer napisał(a):
5. fajnie by było jakby jeszcze był jakiś wzór na przeliczanie na stopnie bo wolałbym nie używać tablicy matematycznej.

Czy mam posądzić Cie o lenistwo? Co za problem sprawdzić w sieci lub tablicach matematycznych? Jest na pierwszej stronie dotyczącej miar kątów. A poza tym sprawdź ile radianów to 180 stopni.
Integer napisał(a):
Żeby nie było że nic nie zrobiłem i idę na łatwiznę to mam wyliczenie wartości sinusa kąta Alfa
ale:
- jak go przekształcić na radiany i na stopnie - chyba ze ta wartość to radiany,
Mam że sin \alpha= \frac{|AC|}{|y_0-y_c|}, i podaje mi że to 0.9397 co daje 70 stopni ale mi potrzebne radiany i stopnie nie wyciągane z tablicy a wyliczane.

Ciężko mi uwierzyć, że Delphi nie posiada funkcji arcsin(x) (arcus sinus -> zwraca wartość kąta wyrażonego w radianach)
Góra
Mężczyzna Offline
PostNapisane: 2 wrz 2010, o 09:05 
Użytkownik

Posty: 8
Lokalizacja: Kielce
No niestety tak jest w programach - oś OX jest u góry.

Nie lenistwo tylko program ma sam sobie wyliczać i pokazywać wynik.

ArcSin zaraz zobaczę czy go nie testowałem wiem że jakieś niepewne wyniki mi dawało i dlatego zrezygnowałem z niego, a może źle go zinterpretowałem.. chwilka.
Góra
Mężczyzna Offline
PostNapisane: 2 wrz 2010, o 09:08 
Użytkownik
Avatar użytkownika

Posty: 4105
Lokalizacja: Poznań
Ja tylko zwróciłem uwagę na stronę formalną. To nie ma żadnego znaczenia dla przedstawionego przez Ciebie problemu ;)
Góra
Mężczyzna Offline
PostNapisane: 2 wrz 2010, o 09:16 
Użytkownik

Posty: 8
Lokalizacja: Kielce
:) ja napisałem ze mam tylko błąd w rozumowaniu czasem drobiazg może zaważyć na sukcesie.

-- 2 wrz 2010, o 10:25 --

mam coś takiego:
sinus Alfa = 0,938718193279434
co daje
arcSin(sinus Alfa) = 1,21889250137993
czy to jest to?

jeśli tak to jak sprawdzić czy:
0,938718193279434 to kąt 70stopni
i
1,21889250137993 to kąt 70stopni

Bo ja to widzę wizualnie i mam porysowane odcinki, chciałbym naocznie sprawdzić czy program dobrze liczy. Współrzędne punktów też są wyliczane więc gdyby był błąd to bym to naocznie widział.

A ogólnie to dziękuję za zainteresowanie.
Góra
Mężczyzna Offline
PostNapisane: 2 wrz 2010, o 10:14 
Użytkownik
Avatar użytkownika

Posty: 4105
Lokalizacja: Poznań
Wstukaj w kalkulator sinus 70 stopni i bedziesz miał wynik porównawczy lub sprawdź z wartościa tablicową.

Cytuj:
sinus Alfa = 0,938718193279434
co daje
arcSin(sinus Alfa) = 1,21889250137993
czy to jest to?

Tak, to jest to :) Wynik w radianach
Radiany zamieniasz na stopnie tak jak pisałem post wcześniej ;)
Góra
Mężczyzna Offline
PostNapisane: 2 wrz 2010, o 10:26 
Użytkownik

Posty: 8
Lokalizacja: Kielce
Czyli prawie super, tylko jeszcze do szczęścia potrzeba żeby mi przeliczało z radianów na stopnie, właśnie problem polega na tym że nie mogę korzystać z tablic bo wyliczenia mają być bardzo precyzyjne, dokładność do stopnia jest nie zadowalająca minimum 2 miejsca po przecinku;
bo w fazie testów muszę mieć możliwość sprawdzenia wyniku.
Wiem że jest jakaś zależność miedzy rad, pi itp. tylko nie wiem jaka.


Albo inaczej: mam tym samym sposobem wyznaczone wartości ale wyniki mi się nie podobają:
sin Alfa =-0,125542038070127
a arcsin( sinAlfa) = -0,125874173021048
Wzrokowo natomiast oceniam kat na 190-200 stopni liczone przeciśnie do ruchy wskazówek zegara (tak samo jak poprzednie 70 stopni).
Czy w takiej sytuacji (cały czas ten sam układ) radiany mogą wyjść ujemne?

Dziękuję bardzo za dotychczasową pomoc.
Góra
Mężczyzna Offline
PostNapisane: 2 wrz 2010, o 10:49 
Użytkownik
Avatar użytkownika

Posty: 4105
Lokalizacja: Poznań
Integer napisał(a):
Wiem że jest jakaś zależność miedzy rad, pi itp. tylko nie wiem jaka.

Odpowiem własnym postem sprzed półtorej godziny: "Co za problem sprawdzić w sieci lub tablicach matematycznych? Jest na pierwszej stronie dotyczącej miar kątów. A poza tym sprawdź ile radianów to 180 stopni." Wujaszek google będzie bardzo pomocny ;)
[To nie jest złośliwość z mojej strony chce tylko Tobie pokazac że wszystkie informacje masz na wyciągnięcie ręki]

Integer napisał(a):
Albo inaczej: mam tym samym sposobem wyznaczone wartości ale wyniki mi się nie podobają:
sin Alfa =-0,125542038070127
a arcsin( sinAlfa) = -0,125874173021048
Wzrokowo natomiast oceniam kat na 190-200 stopni liczone przeciśnie do ruchy wskazówek zegara (tak samo jak poprzednie 70 stopni).
Czy w takiej sytuacji (cały czas ten sam układ) radiany mogą wyjść ujemne?

W ogóle moga być ujemne. (nie będe rozwijał tematu by nie zamieszać) Ale w tym przypadku bedą dodatnie o czym świadczy miara 200 stopni. W przypadku gdy wyjdzie Ci miara kąta ujemna to sprawdź hasła: okres funkcji sinus (lub cosinus) i wzory redukcyjne
Wtedy zawsze sprawisz że wynik bedzie dodatni.

Pytanie : Czy Tobie potrzebne sa kąty skierowane? Jesli mamy kąt 200 stopni miedzy odcinkami to "ten drugi" bedąc uzupełnieniem do 360 stopni ma miarę 160 stopni. Zawsze możemy przedstawić kąt (nieskierowany) pomiedzy dwoma odcinkami w przedziale od 0 do 180 stopni.

-- 2 wrz 2010, o 11:54 --

Uwag kilka:
Integer napisał(a):
3. mam dowolny C (x_c, y_c), który jest punktem leżącym na obwodzie figury, a więc może być wszędzie: np. C(130, 160) lub C(-10, 270)

skąd u Ciebie ujemne wartości współrzednych skoro zakładasz że x i y dodatnie?

Integer napisał(a):
Mam że sin \alpha= \frac{|AC|}{|y_0-y_c|},

Jeżeli masz taki wzór to skąd u Ciebie wartości sinusa wychodzą ujemne?
Góra
Mężczyzna Offline
PostNapisane: 2 wrz 2010, o 11:03 
Użytkownik

Posty: 8
Lokalizacja: Kielce
Co do złośliwości to nie poczytałem sobie wcale bo wiem, że czasami człowiek patrzy ale nie widzi :), zarówno 70 jak i 200 stopni to są rożne testy tego samego modułu.

Program polega na tym, że w takim najprostszym przypadku, mam elipsę gdzieś w środku
ale nie koniecznie jest punkt jako wierzchołek kąta.

Ja mam klikać myszką na obwód elipsy (choć może to być równie dobrze kwadrat)
i jeśli trafię blisko obwodu to program stawia punkt rysuje ramiona kąta i wylicza rad oraz stopnie przeciwnie do ruchu wskazówek zegara.

skoro piszesz że mogą być ujemne no to ja muszę mieć wartości jedno-znakowe,
czyli szukam w Google jak to zamienić arcsin na stopnie nawet jeśli by to miało być coś w stylu 70,5673 stopnia a drugie kliknięcie np. 200,0012 stopnia.

dokładność jest wskazana bo i odległości między punktami są znaczne, zbyt duży błąd jest nie wskazany.

-- 2 wrz 2010, o 12:16 --

z C(-10, 270) to akurat jest szczególny przypadek gdzie obwód może się nie mieścić ale ok zamieńmy to do C(10, 270)

sin Alfa =-0,125542038070127
a arcsin( sinAlfa) = -0,125874173021048
no właśnie korzystam z tej samej funkcji i mam minus a mi potrzebne jest 0-360 stopni albo tego odpowiednik od 0-2pi
pogrzebię w kodzie i podam jakie wartości dały mi wynik jeśli
Góra
Mężczyzna Offline
PostNapisane: 2 wrz 2010, o 11:22 
Użytkownik
Avatar użytkownika

Posty: 4105
Lokalizacja: Poznań
Nie może byc ujemny -> iloraz dwóch liczb dodatnich jest zawsze dodatni. Sprawdź formułę zaimplementowaną. Czy na pewno masz wartości bezwzględne w odpowiednich miejscach?

-- 2 wrz 2010, o 12:25 --

W Twoim przypadku bardzo łatwo określic czy ten kąt skierowany ma miare powyzej czy ponizej 180 stopni. Jesli y_c > y_0 to kąt powyżej półpełnego.

-- 2 wrz 2010, o 12:27 --

Napisałem że moga być. Bo takowe istnieją, jednakże w Twoim przypadku przy takiej implementacji i metodzie liczenia jaką przedstawiłeś jest TO NIEMOŻLIWE.
Czy mozesz wklepać kod Delphi zawierający samą formułę liczenia wartości sinus?
Góra
Mężczyzna Offline
PostNapisane: 2 wrz 2010, o 11:31 
Użytkownik

Posty: 8
Lokalizacja: Kielce
ok 70 st
A 501,249
C 548,121
sinL=0,938718193279434 arcsinL=1,21889250137993

ok 200 st
A 501,249
C 177,290
sinL=-0,125542038070127 arcsinL=-0,125874173021048


oba wyniki powstały z tej samej funkcji
Po dokładnym przekształceniu/ uproszczeniu funkcja działa tak:
dx:= |Xa-Xc|;
dy:= |Ya-Yc|;

c:= Sqrt(dx*dx + dy*dy); - pierwiastek czyli odległość
ddy:= Ya -Yb; << - teraz to mnie zastanawia może tu jest błąd
sinL:= ddy/c;
Result:= sinL; // zwraca wynik Sinus Alfa

wszystko się opiera na tym że // sinL:= dy/ r gdzie A jest brane jako centrum
Góra
Mężczyzna Offline
PostNapisane: 2 wrz 2010, o 11:33 
Użytkownik
Avatar użytkownika

Posty: 4105
Lokalizacja: Poznań
Tak jak myślałem, nie masz wartości bezwzględnej ddy=|Ya-Yb|

-- 2 wrz 2010, o 12:34 --

Zdaje się że to polecenie Abs(x)

-- 2 wrz 2010, o 12:35 --

a powiem wiecej: paradoksalnie przy dx i dy nie musi być wartości bezwzględnej bo i tak je podnosisz do kwadratu przy liczeniu zmiennej c ;)

-- 2 wrz 2010, o 12:39 --

Kod:
1
2
3
4
5
6
7
8
9
10
11
const pi:=3,14159 //dokładność stałej pi określasz sam
---------------------------
dx:= Xa-Xc;
dy:= Ya-Yc;
c:= Sqrt(dx*dx + dy*dy);
 
ddy:= Abs(Ya -Yc); //tu był bład!!!!!!!
sinL:= ddy/c;
-----------------------------------
kat:=arcsin(sinL)
if Yc > Ya then kat:= 2*pi - kat // wynik w radianach


-- 2 wrz 2010, o 12:44 --

Teraz właśnie się zorientowałem że w kodzie masz dobrze określony iloraz ale błąd w wyborze y-ka, natomiast w poście zamiesciłes odwrotny iloraz ;)
Integer napisał(a):
Mam że sin \alpha= \frac{|AC|}{|y_0-y_c|},
Góra
Mężczyzna Offline
PostNapisane: 2 wrz 2010, o 11:47 
Użytkownik

Posty: 8
Lokalizacja: Kielce
jest jeszcze ten problem bo sinus ma wartości ujemne,

.. no właśnie to będzie mój błąd, muszę środek układu sprowadzić do punktu a o czym myślałem a nie do końca zrobiłem

-- 2 wrz 2010, o 13:02 --

Walczę z linią 7 i 8 bo wstawiłem tak jak proponujesz i jak by wychodziło a sinus nadal ujemny

-- 2 wrz 2010, o 13:07 --

ok już minusa nie ma poprawiliśmy funkcję a dalej to mój bąd w kompilacji

-- 2 wrz 2010, o 13:27 --

coś jeszcze jest nie tak wartość dla 200 stopni się nie zgadza

ok 70 st
sinL=0,938718193279434 kąt rad=1,21889250137993
ok 200 st
sinL=0,125542038070127 kąt rad=6,15730582697895

Kąt rad z if Yc > Ya then kat:= 2*pi - kat

-- 2 wrz 2010, o 13:31 --

czy jeszcze powinienem sprawdzać w której ćwiartce leży?
Góra
Mężczyzna Offline
PostNapisane: 3 wrz 2010, o 11:43 
Użytkownik
Avatar użytkownika

Posty: 4105
Lokalizacja: Poznań
Wszystko rozbija się o to że punkt A jest punktem odniesienia. On dzieli nam ekran na cztery ćwiartki. Jesli chcesz miec miare kąta skierowanego (przeciwnie do ruchów wskazówek zegara gdzie odcinek AB jest jest kątem zerowym to bedzie to wyglądało tak:

Kod:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const pi:=3,14159 //dokładność stałej pi określasz sam
---------------------------
dx:= Xa-Xc;
dy:= Ya-Yc;
c:= Sqrt(dx*dx + dy*dy);
 
ddy:= Abs(Ya -Yc); //tu był bład!!!!!!!
sinL:= ddy/c;
-----------------------------------
kat:=arcsin(sinL)

if Yc < Ya then
    If Xc > Xa then Rezultat:=kat
    else Rezultat:= pi - kat
else
    If Xc > Xa then Rezultat:=2*pi - kat
    else Rezultat:= pi + kat

Jesli chcesz miec miare kąta nieskierowany ograniczony miara 180 stopni to bedzie to wyglądało tak:
Kod:
1
2
3
4
5
-----------------------------------
kat:=arcsin(sinL)

If Xc > Xa then Rezultat:=kat
else Rezultat:= pi - kat
Góra
Mężczyzna Offline
PostNapisane: 3 wrz 2010, o 14:25 
Użytkownik

Posty: 8
Lokalizacja: Kielce
Zależy mi na całych 360-ci stopniach. ok wszystko działa świetnie.

Teraz do wersji ostatecznej brakuje uwzględnienia takiego warunku (nie powiem bo główkowałem nad tym ale brakuje mi wiedzy).
Otóż nasz odcinek odniesienia AB czyli "zerowe" ramie kąta jest ruchome. może się przesunąć o dowolny kat jak skazówki w zegarze ale mi wystarczy że położenie AB będzie między 1:30 a 4:30 a nie tylko centralnie na 3-ciej.

Czy taki warunek jest szanse stworzyć?
myślałem o tym żeby mierzyć kąt między położeniem AB a osią OX i o ten kąt rotować punkty tak aby AB pokrywało się z OX. A wtedy pozostaje tylko sprawdzić powyższy warunek, jednak czy to jest idealne-najszybsze dla komputera rozwiązanie?
Bo może można sprawdzić czy punkt C leży na lewo od linii przechodzącej przez AB albo na prawo i wtedy ewentualnie w którymś z tych przypadków +180stopni albo równowartość w radianach.

Streszczając; w tej chwili mam trzy punkty i a1, a2 współczynniki kierunkowe linii może od tych współczynników się da jakoś uzależnić, w końcu są jakby (wcześniej wyczytałem) wartościami tngL

Temat się niechcący bardzo rozciągnął :) ale pewnie komuś się jeszcze przyda.
Góra
Utwórz nowy temat Odpowiedz w temacie  [ Posty: 16 ]  Przejdź na stronę 1, 2  Następna strona


 Zobacz podobne tematy
 Tytuł tematu   Autor   Odpowiedzi 
 Kąt nachylenia drabiny do poziomu ziemi.  edwinion  1
 Długość odcinka w trójkącie  Nividis  1
 Oblicz długość odcinka trójkąta  LichuKlichu  1
 Prosta Eulera - obliczenie długości odcinka w trójkącie  black  4
 Promień koła opisanego na okręgu, długość odcinka, tales  vingar  5
 
Atom [Regulamin Forum] [Instrukcja LaTeX-a] [Poradnik] [F.A.Q.] [Reklama] [Kontakt]
Copyright (C) Karpatka.pl