Új hozzászólás Aktív témák
-
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
- AMD off topik: VGA, CPU, APU és minden, ami AMD
- Android alkalmazások - szoftver kibeszélő topik
- LEGO klub
- Yettel topik
- Újabb Samsungok telepíthetik a Galaxy AI-t
- Luck Dragon: Asszociációs játék. :)
- Aliexpress tapasztalatok
- HiFi műszaki szemmel - sztereó hangrendszerek
- SSD kibeszélő
- Futás, futópályák
- További aktív témák...
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: Ozeki Kft.
Város: Debrecen