- Bittorrent topik
- Otthoni hálózat és internet megosztás
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- Hálózati / IP kamera
- Ubuntu Linux
- HBO Max & OD topic
- Vodafone otthoni szolgáltatások (TV, internet, telefon)
- Synology routerek
- Facebook profil letiltás kapcsolt ismeretlen Instagram fiók miatt
- Kaspersky Antivirus és Internet Security Fórum
Új hozzászólás Aktív témák
-
cocka
veterán
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
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
- ASUS H97-PRO alaplap 1150 Intel H97 lapkakészlet, 4xDDR3, SATA 3.0, HDMI, M.2 SSD foglalat
- Macbook Pro 16 M1 PRO 10C/16C 16GB - 1TB Magyar billentyűzet - Garanciális 2025.augusztus 4.-ig
- Sharkoon TG5 számítógép ház Corsair HX650 tápegységgel eladó
- Asus V8460 Ultra ( Geforce 4 Ti 4600 )
- HP Prodesk 600 G5 DM, Tiny i5-9500T , 8-16GB DDR4 , 256GB NvME , 2 év gari , AAM számla
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: Ozeki Kft.
Város: Debrecen