📄 _gr_arrowhead.ado
字号:
*! version 1.0.0 18dec2004
program _gr_arrowhead
args ang msz bsz x0 y0 x1 y1
if (`x0'>=. | `x1'>=. | `y1'>=. | `y0'>=.) exit // Exit
local xtrans = `gdi(gbeta)' / `gdi(xbeta)'
local ytrans = `gdi(gbeta)' / `gdi(ybeta)'
local phi = atan(((`y1'-`y0') / (`x1' - `x0'))*(`xtrans'/`ytrans'))
if `phi' >= . {
local phi = cond(`y1'-`y0' > 0, -c(pi)/2, c(pi)/2)
}
local sgn = cond(`x1'-`x0'>0, "+" , "-")
if (`bsz' == 0) arrowhead_simple `phi' `sgn' `xtrans' `ytrans' `0'
else arrowhead_barb `phi' `sgn' `xtrans' `ytrans' `0'
end
program arrowhead_simple
args phi sgn xtrans ytrans ang msz bsz x0 y0 x1 y1
local ya = `y1' `sgn' `ytrans' * `msz' * sin(c(pi) + `phi' + `ang')
local xa = `x1' `sgn' `xtrans' * `msz' * cos(c(pi) + `phi' + `ang')
gdi line `x1' `y1' `xa' `ya'
local ya = `y1' `sgn' `ytrans' * `msz' * sin(c(pi) + `phi' - `ang')
local xa = `x1' `sgn' `xtrans' * `msz' * cos(c(pi) + `phi' - `ang')
gdi line `x1' `y1' `xa' `ya'
end
program arrowhead_barb
args phi sgn xtrans ytrans ang msz bsz x0 y0 x1 y1
local bsz = `bsz' * cos(`ang')
local yb = `y1' `sgn' `ytrans' * `bsz' * sin(c(pi) + `phi')
local xb = `x1' `sgn' `xtrans' * `bsz' * cos(c(pi) + `phi')
local ya = `y1' `sgn' `ytrans' * `msz' * sin(c(pi) + `phi' + `ang')
local xa = `x1' `sgn' `xtrans' * `msz' * cos(c(pi) + `phi' + `ang')
gdi moveto `x1' `y1'
gdi polybegin
gdi lineto `xa' `ya'
gdi lineto `xb' `yb'
local ya = `y1' `sgn' `ytrans' * `msz' * sin(c(pi) + `phi' - `ang')
local xa = `x1' `sgn' `xtrans' * `msz' * cos(c(pi) + `phi' - `ang')
gdi lineto `xa' `ya'
gdi lineto `x1' `y1'
gdi polyend
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -