GEVAL_TRAN_MATRIX(3NCARG)

πŸ“¦ version 6.6.2, in epel 9, fedora 43, fedora 44

✨ geval_tran_matrix β€” it's giving transformation matrix πŸ’…

okay bestie so this is a page from the NCAR GRAPHICS manual set (yes, the UNIX one, the classic) and it's about geval_tran_matrix, which literally just means "evaluate transformation matrix". No cap.

So what does it do? It constructs a GKS segment transformation matrix starting from a given point, a shift vector, a rotation angle, and X and Y scale factors. That's it. That's the whole vibe. πŸŽ€


🌸 SYNOPSIS 🌸

#include <ncarg/gks.h>

void geval_tran_matrix(const Gpoint *point, const Gvec *shift, Gdouble
angle, const Gvec *scale, Gcoord_switch coord_switch, Gtran_matrix
tran_matrix);

yes she takes six arguments. we're gonna go through every single one, no skipping, periodt. πŸ‘‘


πŸ’– DESCRIPTION πŸ’–

  • point.x β€” (Gfloat, Input) β€” An X coordinate value for a fixed point to be used for the scaling and rotation parts of the output transformation. Now here's the tea: point.x is either in world coordinates or normalized device coordinates, depending on the setting of the argument coord_switch described below. Pick a lane, bestie. πŸ¦‹
  • point.y β€” (Gfloat, Input) β€” A Y coordinate value for a fixed point to be used for the scaling and rotation parts of the output transformation. Same deal as its sibling: point.y is either in world coordinates or normalized device coordinates depending on the setting of the argument coord_switch described below. πŸ’œ
  • shift.delta_x β€” (Gfloat, Input) β€” The X component of a shift vector to be used for the scaling part of the output transformation. And yep, shift.delta_x is either in world coordinates or normalized device coordinates depending on the setting of the argument coord_switch described below. (do you see a pattern? we love consistency.) ✨
  • shift.delta_y β€” (Gfloat, Input) β€” The Y component of a shift vector to be used for the scaling part of the output transformation. shift.delta_y is either in world coordinates or normalized device coordinates depending on the setting of the argument coord_switch described below. 🫢
  • angle β€” (Input) β€” The rotation angle, in radians, to be used for the rotation part of the output transformation. radians!! not degrees!! do not come crying to me when your shape is sideways. 😭
  • scale.delta_x β€” (Gfloat Input) β€” An X coordinate scale factor to be used in the scaling part of the output transformation.
  • scale.delta_y β€” (Gfloat Input) β€” A Y coordinate scale factor to be used in the scaling part of the output transformation.
  • coord_switch β€” (Input) β€” A coordinate switch to indicate whether the values for the arguments shift and scale (described above) are in world coordinates or normalized device coordinates. Possible values include:
    • GCOORD_WC β€” World coordinates 🌍
    • GCOORD_NDC β€” Normalized device coordinates πŸ“
  • tran_matrix β€” (Gfloat, Output) β€” A 2x3 array that contains the GKS transformation matrix in a form that can be used as input to other GKS functions such as gset_seg_tran. slay, she's reusable. πŸ’…

🧚 USAGE 🧚

If world coordinates are used, the shift vector and the fixed point are transformed by the current normalization transformation. (iykyk)

The order of the transformation operations as built into the output matrix is: scale (relative to the fixed point); rotate (relative to the fixed point); shift.

Also important, lowkey: elements tran_matrix[0][2] and tran_matrix[1][2] are in normalized device coordinates and the other elements of tran_matrix are unitless. Don't ask me why, that's just the lore. πŸ“œ

🌈 EXAMPLE 🌈

The following code

pi = 3.1415926;
point.x = point.y = 0.5;
shift.delta_x = 0.25;
shift.delta_y = 0.;
scale.delta_x = 0.5;
scale.delta_y = 1.5;
geval_tran_matrix(&point,&shift,45.*pi/180.,&scale,GCOORD_WC,tm);

would produce a transformation matrix in tm that would: scale the X coordinates by .5, scale the Y coordinates by 1.5 (relative to the fixed point of (.5,.5)); rotate by 45 degrees (relative to the fixed point (.5,.5)); and shift by .25 in X and 0. in Y. The input values for the fixed point and shift vector are in world coordintes.

(yes, the original says "coordintes". we keep the typo, we respect the ancestors. πŸ™ˆ)


πŸŽ€ ACCESS πŸŽ€

To use the GKS C-binding routines, load the ncarg_gks and ncarg_c libraries.


πŸ‘‘ SEE ALSO πŸ‘‘

Online: gaccum_tran_matrix(3NCARG), gclose_seg(3NCARG), gcreate_seg(3NCARG), gcopy_seg_ws(3NCARG), gdel_seg(3NCARG), ginq_name_open_seg(3NCARG), ginq_set_seg_names(3NCARG), gset_seg_tran(3NCARG), gks(3NCARG), ncarg_gks_cbind(3NCARG)

Hardcopy: User's Guide for NCAR GKS-0A Graphics; NCAR Graphics Fundamentals, UNIX Version


Copyright (C) 1987-2009 University Corporation for Atmospheric Research The use of this Software is governed by a License Agreement.


okay that's the whole page, bestie, you're officially educated 🧠✨ this was the GEVAL_TRAN_MATRIX(3NCARG) page from the NCAR Graphics manual, UNIX flavour, dated March 1993 β€” and honestly? she still ate. go forth and rotate your segments, main character. πŸŒΈπŸ¦‹πŸ’…

πŸ“¦ where this page comes from