HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
1008
zod3module 座標の求め方について3解決


zo

リンク

2009/10/8(Thu) 00:38:00|NO.28191

こんばんは、zoと申します。

d3moduleで描画された画像の任意の箇所から元の座標を求めることは可能でしょうか。

例えば、下記のコードで描画された画像に対して任意のマス目をクリックしたとき、
元の座標(x,y,0)を導きたいと考えています。

#include "d3m.hsp"
d3setcam -600, 1800, 1800, 0, 0, 0
color 255, 0, 0
repeat 31
a = cnt * 2000 / 30 - 1000
d3line a, 1000, 0, a, -1000, 0
d3line 1000, a, 0, -1000, a, 0
loop

よろしくお願いします。



この記事に返信する


GENKI

リンク

2009/10/9(Fri) 01:21:35|NO.28217

とりあえずpgetによるサンプル。
http://www.fujidig.com/2008/02/d3module-mouse-hover-cell.html



koz

リンク

2009/10/10(Sat) 18:48:23|NO.28260

ありがとうございます。
ただ、ちょっと思っていることと違うようです。
もう少し調べてみます。



Shairo

リンク

2009/10/15(Thu) 03:21:22|NO.28300

解決済みのスレにすいません。
過去に同じようなことをしたので、少し長いですがソースを貼っておきます。
といっても、今みるとさっぱりな計算なんですが・・・;
もっと計算量の少ない式があるかもしれません。

#include "d3m.hsp"

camx=-600.0 : camy=1800.0 : camz=1800.0 ;カメラ位置
gazx=0.0 : gazy=0.0 : gazz=0.0 ;注視点
fov=1.0 ;視野角

repeat
stick key
if key&128 : end ; 終了

d3setcam camx,camy,camz, gazx,gazy,gazz ,fov

;カメラの向きのベクトル
focx=gazx-camx
focy=gazy-camy
focz=gazz-camz

;カメラの横方向のベクトル
tmpx=focx
tmpy=focy

;長さを1にする
temp=d3dist(focx,focy,focz)
focx/=temp
focy/=temp
focz/=temp
temp=d3dist(tmpx,tmpy,0)
tmpx/=temp
tmpy/=temp

;カメラの縦方向のベクトル
tatex= focz * tmpx
tatey= focz * tmpy
tatez=-focx * tmpx - focy * tmpy

mx=-double(d3wincx-mousex)
my=-double(d3wincy-mousey)
mz=double(ginfo_winy)/fov

;マウスカーソルのある方向のベクトルを出す
tgtx= tmpy*mx + tatex*my + focx*mz
tgty=-tmpx*mx + tatey*my + focy*mz
tgtz= tatez*my + focz*mz

;高度0地点のX,Y座標を出す
if tgtz<0 {
temp=camz/tgtz
zx=-tgtx*temp+camx
zy=-tgty*temp+camy
}
;zx,zyが高さ0地点のX,Y座標

redraw 0
color 255,255,255 : boxf

;グリッド
color 100, 100, 100
for c,-1000,1000+100,100
d3line c,-1000,0,c,1000,0
d3line -1000,c,0,1000,c,0
next

;表示
color 255,0,0
d3line zx,-1000,0 ,zx,1000,0
color 0,255,0
d3line -1000,zy,0 ,1000,zy,0
color 0,0,255
d3circle zx, zy, 0 ,100 ,0

redraw 1
await 20
loop



ONION software Copyright 1997-2023(c) All rights reserved.