任意の座標間に矢印つきの直線を描画したいのですが、可能でしょうか?
イメージとしては、WordやExcel、PowerPointの矢印描画あたりです。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

こんなコードをでっちあげてみました。


いかがですか。

//終点に ">" を付ける
//nStartXPos, nStartYPos… 始点
//nEndXPos, nEndYPos… 終点
#include <math.h>
void C???View::Arrow(CDC * pDC, int nStartXPos, int nStartYPos, int nEndXPos, int nEndYPos)
{
inti;
intnX, nY;
doubledbAng;

#define LENGTH10//矢印の先の長さ
#define ANGLE(3.1415/180.0*30.0)//矢印の開く角度 … 現在30度
dbAng = 3.1415 + atan2(nEndYPos-nStartYPos, nEndXPos-nStartXPos);

for (i=-1; (i<=1); i+=2)
{
nX = (int)(cos(dbAng+ANGLE*i) * LENGTH) + nEndXPos;
nY = (int)(sin(dbAng+ANGLE*i) * LENGTH) + nEndYPos;
pDC->MoveTo(nEndXPos, nEndYPos);
pDC->LineTo(nX, nY);
}
}
    • good
    • 1
この回答へのお礼

わざわざコードを書いていただき、ありがとうございます!!
さっそく試してみます。

お礼日時:2001/04/03 14:55

MoveTo と LineTo で書く線は Word のような矢印が


付きませんから、やっぱり自力で矢印を書くしかないかなー。
「端点キャップ」に関しては下記の URL を見ると分かりやすいと思います。

参考URL:http://www.topposystem.co.jp/DL/Win32API/GUI/%E3 …
    • good
    • 0
この回答へのお礼

ありがとうございます。
端点キャップについても分かりやすい説明がありました。
結局、端点キャップでは問題は解決しないんですね、残念。

お礼日時:2001/04/03 14:51

Windows & Visual C++ が前提ですと(書いてありませんが^^:)、


CDC に MoveTo と LineTo で描画出来ますよ。

もう少し puntoabart さんからの情報があると良いですね。
例えば、プラットホームと開発環境(IDE)の種類、それから
どこに描画するかの情報です。

この回答への補足

Windows 98とVisual C++6.0で作ってます。
(プログラム関連の質問で環境も書いてないのは問題ですね…。すいません)

MoveToとLineToで直線は引けるのは分かるのですが、
その直線の両端の形状を変更することはできるのでしょうか?
私がしたいのはそれなのです。

リファレンスを見ていると、CPenの引数に"PS_ENDCAP_~"というものがありました。
解説には「端点キャップ」と書いてありました。
これは私のしたいことに関係があるのでしょうか?

あ、ちなみに直線を描画するのはウィンドウ内です。

補足日時:2001/04/03 10:55
    • good
    • 0

すいません。

質問の意味がよくわかりません。
Word2000に図形描写があります。この中に矢印を描写出来る物があります。
これで矢印がかけます。
この矢印はある程度のグリットの点に乗ります。このグリット間(点と点の間)をもっと細かく任意に書きたいのでしょうか。
またはマクロで任意に矢印を書きたいという事でしょうか。
また「イメージとしては、WordやExcel、PowerPointの矢印描画あたりです。」のところがよく理解できません。どうもすいません。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qほしい素材が見当たりません

今windowsのマニュアルつくりをしているのですが、画面上で矢印から、手のマークに変わる時の手の素材を探しているのですが、なかなか見つからなく困っています。また、マウス本体の素材も探しているのですが、見当たりません。
ネットの素材集にあると聞いたのですが、見つけられません。
できれば、無料の素材を教えてほしいのですが、よろしくお願いいたします。

Aベストアンサー

>> 手の素材を探しているのですが、

自分で作っては??

WindowsMeでしたら、[マイコンピュータ]-[コントロールパネル]-[マウス]の、[ポインタ]パネルの「ユーザー設定」欄に、手のマークのサンプルがありますので、そのダイアログの上にマウスポインタを載せた状態で、キーボードの[Ctrl]+[PrintScreen]ボタンを押します。(すると、このダイアログがコピーされる)

次に、[スタート]-[プログラム]-[アクセサリ]の「ペイント」を起動し、[編集]-[貼り付け]で、さっきのダイアログを貼り付け、要らない部分(「手のマーク」以外のところ)を切り取って保存すれば出来上がりです♪ 簡単でしょ(^-^*)

…あと、素材探しに良いHPも知ってます☆
(参考URLを見てみてください)
画像専門のサーチエンジンです。
素材屋のリンク集は、よくあるけど、
画像自体を検索できるとこって、
ここだけじゃないかな?って気がします(憶測)
まず素材を見てからサイトを訪れることが出来るので、とても重宝しています。
…ということで、そこの[キーワード検索]も利用してみてください。

ではではー(^_^)/~゛

参考URL:http://www.ran.co.jp/Sozai/html/Sozai.html

>> 手の素材を探しているのですが、

自分で作っては??

WindowsMeでしたら、[マイコンピュータ]-[コントロールパネル]-[マウス]の、[ポインタ]パネルの「ユーザー設定」欄に、手のマークのサンプルがありますので、そのダイアログの上にマウスポインタを載せた状態で、キーボードの[Ctrl]+[PrintScreen]ボタンを押します。(すると、このダイアログがコピーされる)

次に、[スタート]-[プログラム]-[アクセサリ]の「ペイント」を起動し、[編集]-[貼り付け]で、さっきのダイ...続きを読む

Qスクリーン座標からワールド座標への座標変換について

こんにちは。
現在自作で3Dゲームを制作しています。
ワールド座標からスクリーン座標への変換に成功したので
今度は逆にスクリーン座標からワールド座標への変換に挑戦していたのですが
どうにもうまくいかずに詰まってしまい、質問にきました。

ワールド→スクリーン変換にて得たスクリーン座標(sx, sy, sz)を使用して
スクリーン→ワールド変換を行うと成功するのですが
直接スクリーン→ワールド変換を行おうとすると失敗します。
というのも、直接スクリーン→ワールド変換時には sz にあたる値を
どうしたらいいものか・・・となってしまったからです。

今回、手計算(ヘルプ関数は使わず)で行っているのですが、計算していることは
ビューポート行列、プロジェクション行列、ビュー行列の逆行列を使用し
スクリーン座標(とりあえずszを0にして対応)に対して座標変換をおこなっています。
何か計算が足りていないのか、はたまた勘違いをしているのか・・・


詳しいご教授お願いいたします。


ワールド行列:単位行列
ビュー行列:視点と視線は動的に変動、上向き(0,1,0)
プロジェクション行列:視野角45度、アスペクト比 800/600
画面サイズ:800×600
テストに使用しているスクリーン座標:(200,300)

こんにちは。
現在自作で3Dゲームを制作しています。
ワールド座標からスクリーン座標への変換に成功したので
今度は逆にスクリーン座標からワールド座標への変換に挑戦していたのですが
どうにもうまくいかずに詰まってしまい、質問にきました。

ワールド→スクリーン変換にて得たスクリーン座標(sx, sy, sz)を使用して
スクリーン→ワールド変換を行うと成功するのですが
直接スクリーン→ワールド変換を行おうとすると失敗します。
というのも、直接スクリーン→ワールド変換時には sz にあたる値を
どうしたらい...続きを読む

Aベストアンサー

そもそもスクリーンに映っているのは奥行き情報が消えた「2D な絵」ですよね. だとしたら, 「視点から当該スクリーン座標に向かう (無限に長い) 視線」の上にある点はすべて「3D なワールド座標」の候補になってしまいます. そして, そのうちのどれが「正しいワールド座標」なのかをこれだけの情報から求めることは不可能です.

夜空に光る星までの距離を求めるには, 「ここで光ってる」という情報だけでは不足ですよね.

もちろん, スクリーンに映っている画像を作る元になった (ワールド座標における) オブジェクトの配置がすべてわかっているなら, 「視線の先にあるオブジェクト」を調べることはできます. もっと難しくして鏡面反射とか屈折とかを考慮すると, 結局レイトレになっちゃいますがここではそこまでの処理は不要でしょう.

Qダウンロードボタンのフリー素材を教えてください!

ホームページでフリーソフトなどを配布している場合、ここをクリックするとダウンロードできます、という意味のボタン型アイコンの素材を探しています。

下向きの矢印が流れていたり点滅しているアニメーションGIFがいいです。
そんな素材集のサイト等教えていただけると助かります!

Aベストアンサー

ここの素材は全てフリーだと思います。
いい感じの素材が沢山ありますよ。

参考URL:http://sozai.livedoor.biz/archives/cat_50026052.html

Q直線を描画するプログラム

初歩的ですみません。
マウスで始点と終点を決めて直線を書くプログラムを知っている方がおりましたら教えてください。

よろしくお願いします。

Aベストアンサー

WinTKというのは良く分からないんで、MFCの方を……
とりあえずダイアログアプリケーションで説明すると、

1.
 ダイアログベースのスケルトンを作ります
2.
 xxxDlg.h に座標を保持るためメンバを追加します。
class CxxxDlg : public CDialog
 {
   CPoint m_ptBegin, m_ptEnd;

3.
クラスウィザードで WM_LBUTTONUP, WM_RBUTTONUP を選択します。

4.
 void CxxxDlg::OnLButtonUp(UINT nFlags, CPoint point)
 {
   // ここの point に左ボタンが離された座標が入ってますので保持しておきます(始点)
   m_ptBegin = point;
   CDialog::OnLButtonUp(nFlags, point);
 }
5.
 void CxxxDlg::OnRButtonUp(UINT nFlags, CPoint point)
 {
   // ここの point に右ボタンが離された座標が入ってますので保持しておきます(終点)
   m_ptEnd = point;

   // 再描画します。
   InvalidateRect( NULL );

   CDialog::OnRButtonUp(nFlags, point);
 }

6.
 CxxxDlg::OnPaint()関数の以下の部分を変更します。

 else
 {
   CDialog::OnPaint();
 }
      ↓
 else
 {
   CPaintDC dc( this );

   dc.MoveTo( m_ptBegin );
   dc.LineTo( m_ptEnd );

   CDialog::OnPaint();
 }

と、大体こんな感じです。m_ptBegin, m_ptEndはコンストラクタで初期化してやっておいて
ください。説明が大雑把なんでわかりにくかったら言ってくださいね。

ほな。

WinTKというのは良く分からないんで、MFCの方を……
とりあえずダイアログアプリケーションで説明すると、

1.
 ダイアログベースのスケルトンを作ります
2.
 xxxDlg.h に座標を保持るためメンバを追加します。
class CxxxDlg : public CDialog
 {
   CPoint m_ptBegin, m_ptEnd;

3.
クラスウィザードで WM_LBUTTONUP, WM_RBUTTONUP を選択します。

4.
 void CxxxDlg::OnLButtonUp(UINT nFlags, CPoint point)
 {
   // ここの point に左ボタンが離された座標が入ってますので保...続きを読む

Q螺旋状の矢印を描くには?

Photoshop CSを使っています。
画像のような螺旋状の矢印を描きたいのですが、どのような方法がありますでしょうか。
或いは素材を配布しているところがありましたら、教えて下さい。

尚、タブレットは持っていません。また、イラレも使えません。

Aベストアンサー

アバウトでいいのか、それともきっちりと引きたいのか分かりませんが、
パスツールを使うのは一つの手だと思います。

そして境界線を選択範囲にして境界線を描くにすれば図形らしきものは描けます。
そのとき境界線の太さを指定すれば単線でもいけると思います。

Q遠近法で描画した長方形を分割した場合の座標

縦長の長方形があり、これを均等に6分割して、
正方形が6つ並んでいるようにプログラムで描画したいと考えています。
(図では正方形に見えませんが・・)

問題は遠近法を用いて、6分割したいというところです。
等比数列や黄金比などを使って算出すると思いますが、
具体的な算出ロジックが分かりません。

分かっている情報としては、
・各正方形の辺の長さ(遠近法を適用していない状態の)
・縦長長方形の辺の長さ・四点の座標

以上、よろしくお願いします。

Aベストアンサー

>縦長長方形の辺の長さ・四点の座標

これは、遠近法を適用した投影図上の座標ですよね。


縦長長方形の左辺の7個の点のx座標をx1,x2,x3,・・・,x7とする(x1とx7は既知)。
左辺と右辺の延長線の交点のx座標をx0とする。

x2-x1,x3-x2,x4-x3,・・・,x7-x6は等比数列になっているから、その公比をrとすれば、
合計は、
x7-x1=(x2-x1)(1-r^6)/(1-r)

もし、正方形が6個だけでなく無限に続いているとしたら、それはx0に限りなく近づいていくから、
x0-x1=(x2-x1)/(1-r)

この2つの式からr,x2が分かるので、x3,x4,x5,x6も計算可能。

y座標も同様です。

Q線の中が波打つように動く映像素材の名前

こんにちは、少し映像素材について調べています

動画の添付をしているのですが動画の2秒後に矢印の中でオレンジと城の線が波打つような映像素材がありますよね

あれはなんと呼ばれる映像表現なのでしょうか?
また、このような動画素材をたくさん探している最中なのでどのようなキーワードで検索すれば色々出てくるのかを教えていただきたいと思います

天気予報では川の流れで使われていたり、発電網では電気の流れを視覚的に表現していますよね

電気の流れとかでこの表現が使われる時は非常にわかりやすいです
しかし、色んな所でカーブしたりしているにも関わらず線の中の波はそれにあわせて進んでいますよね?
あれは一体どうやっているのでしょうか?
線を引いたらその線の上を波が移動するように勝手に作ってくれるソフトがあるのでしょうか?
もしあれば名称を教えて欲しいと思います

よろしくお願いします

http://www.youtube.com/watch?v=nIBrSIb-07s&feature=related

Aベストアンサー

全体はFLASHで作ってあります

あの表現方法もFLASHで作れます。

あの部分単体だったらGIFアニメと呼ばれる物です、それで作れます。

探すのなら、「素材 GIFアニメ 矢印」で探してください

線を交互に位置を変えて並べてるだけです
GIFアニメ作成ソフトで作れます。

QCStaticコントロールの静的イメージ描画

はじめまして、質問させてください。

VC++ 2005 MFC で開発しております。

Picture Control(DDX CStasic型)に
イメージ(外部ファイル JPG)を静的に描画させたいのですが
方法がわかりません。

お詳しい方がおられましたら、ご教授お願いいたします。

ちなみに
CImageを使用して描画はできるのですが
その場合、OnPaintをオーバーライドして
描画更新処理を書かないと一度だけ描画されて終わって
しまうと思います。

CStaic変数にロードしたら
再度ロードされるまで
ずっと描画させていたいです。

以上になります。
宜しくお願いいたします。

Aベストアンサー

SelectObjectで選択するとその時まで選択されていたデバイスハンドルを返してきます
そのハンドルを一時変数に保存しておいて描画後に戻してやるのです

CBitmap* pOld = m_dcMem.SelectObject( &m_bmpMem );
といった具合で記憶して描画処理を行います
使用後に
m_dcMem.SelectObject( pOld );
といった具合にして m_bmpMemをDCからはずします
この後
m_ctlImage.SetBitmap( m_bmpMem );
といった具合に選択してやればできると思います

CStaticのTypeはビットマップで無いとSetBitmapでイメージを表示しません

Qパワーポイントの矢印の変更について

パワーポイントのテンプレートにある、曲線の矢印を使用したいのですが、曲線だと、片方向の矢印しかなく、もし、両方向の矢印を使うとしたら、オートシェイプの直線の両方向矢印しか出来ません。

太い曲線の両方向矢印の出し方をご存知の方、教えてください。

Aベストアンサー

恐らく図形描画のオートシェイブのブロック矢印だと思うのですが、私も両方矢印は知りません。
もしかしたら、そのうち「その他のオートシェイブ」に新しいのが出るかもしれないですが。

ですので、私だったら、いろんな矢印を重ねて合成して作るか、自分でマウスで書きます。

意外にできるもんですよ。

Q他のプロセスの描画領域を再描画

他のプロセスの描画領域を再描画
対象となる他のプロセスのウインドウハンドルやデバイスコンテキストは利用可能のようですが再描画の方法をShowWindow(hWnd, SW_HIDE);ShowWindow(hWnd, SW_SHOW);としているために真っ白な状態が見えたりするのでそれを避ける方法を教えてください。

Aベストアンサー

普通は、OnPaintに描画処理を纏めてしまうのが一番効率的な気が・・・。

http://www.t-recipe.com/vc/redraw.html


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング