Keresés

Új hozzászólás Aktív témák

  • cellpeti

    veterán

    válasz Tottu #1196 üzenetére

    Pitagorasz tétel?? Derékszögű 3szög,ha ismert a szög,kiszámolog a szögeit és utánna az oldalait is ki tudod...asszem :U

    Tigris, tigris, csóvafény...

  • cocka

    veterán

    válasz Tottu #1196 üzenetére

    Na de most akkor tisztázzuk már. A kis piros szakaszok hossza, amiket a piros és zöld karika határol, ismert?

    Mert akkor felírod a piros és zöld pontok távolságát, aztán egyenlővé teszed a kis piros hosszával.

    Na de ezzel még korántsincs vége. Ha ugyanis adott a kis piros hossza, akkor azt el jelölheted r-nek és mivel alfa adott máris kész a polárkoordináta-rendszered amiből a következőképp számolható a piros karika koordinátája.

    Mivel r hossza ismert az ábrán a kis piros karikából merőlegest állítasz a fekete mondjuk k egyenesre. Ez az egyenes a k-t elmetszi valahol, ekkor ez a metszéspont és a szöghöz közelebbi zöldvégpont adja az á szakaszt. A bét pedig a piros karikát és az új metszéspontot összekötő szakasz adja. Tehát kapsz egy derékszögű háromszöget, amiben igaz az, hogy

    tg alfa = b/a és a másik egyenletet pedig abból kapod, hogy r^2=a^2+b^2 Ebből a két egyenletből megkapod a-t és b-t vagyis a kérdéses pont koordinátáit. Na most hogy ez a gondolatkísérlet tényleg működik-e vagy sem, azt ki kell próbálni.

    Konkrét értékek is vannak a feladatban vagy csak annyit írnak, hogy adott ez meg amaz, de konkrétum semmi?

  • Jester01

    veterán

    válasz Tottu #1202 üzenetére

    Simán a fekete szakasz szögét kiszámolod majd ez alapján a piros vektorokat legyártod elforgatással és szépen hozzáadod a kívánt végponthoz.
    Kb így:
    adott: P0(x0, y0), P1(x1, y1), r és alfa
    szakasz szöge beta = atan2(y1 -y0, x1 - x0)
    nyíl szögek gamma0 = beta + alfa, gamma1 = beta - alfa
    elforgatott hegy Q0(x2, y2) = (r * cos(gamma0), r * sin(gamma0))
    Q1(x3, y3) = (r * cos(gamma1, r * sin(gamma1))
    eltolt nyílhegyek végpontja:
    R0 = P1 - Q0 = (x1 - x2, y1 - y2)
    R1 = P1 - Q1 = (x1 - x3, y1 - y3)

    Kész. Annyi trükk van benne, hogy beta számolásnál figyelni kell a helyes koordináta negyedre (ezért használtam atan2-t) illetve a piros szakaszok helyett azok ellentettjét könnyebb számolni ezért a kivonás a végén.
    Itt egy példakód C#-ban:

    private Gdk.Point GetHalfArrow(Gdk.Point P1, double gamma, int r)
    {
    Gdk.Point Q = new Gdk.Point((int)(r * Math.Cos(gamma)), (int)(r * Math.Sin(gamma)));
    Gdk.Point R = new Gdk.Point(P1.X - Q.X, P1.Y - Q.Y);
    return R;
    }

    private void DrawArrow(Gdk.Point P0, Gdk.Point P1, int r, double alpha)
    {
    double beta = Math.Atan2(P1.Y - P0.Y, P1.X - P0.X);
    Gdk.Point R0 = GetHalfArrow(P1, beta + alpha, r);
    Gdk.Point R1 = GetHalfArrow(P1, beta - alpha, r);

    // draw 3 lines: P0-P1 for body, P1-R0 and P1-R1 for the head
    }

    Jester

Új hozzászólás Aktív témák