No.1ベストアンサー
- 回答日時:
質問の趣旨が理解できません。
(1)から(6)まで何度も読んでみたんですが。質問は他人が読んで明確に意味が分かるような表現でお願いします。
とりあえず、「鉛筆型の5角形を作成」という言葉だけを手がかりにサンプルを示します。勘違いしてるようならご勘弁。その際は補足で詳細を明示してください。
2点の座標と鉛筆の太さは決め打ちしてます。また先端(芯の出ている方)の角度は90度としてます。
マウス操作で2点の座標を取得する方法は開発者ガイドの第10章に詳しいサンプルがあるのでそちらを参照してください。
#include <math.h>
TPoint bottom( 10, 10 ), top( 100, 100 );
int width = 20; //鉛筆の太さ
double length = sqrt( //2点間の距離 これを鉛筆の長さにする
pow( top.x - bottom.x, 2 ) + pow( top.y - bottom.y, 2 )
);
if ( length <= width ) return; //鉛筆型が書けないときは処理を中断
//2点の座標から線分の傾き(ラジアン)を取得
double rad = atan2( top.y - bottom.y, top.x - bottom.x );
//x軸上に置いた場合の鉛筆の座標 先端から左回り
TPoint points[] = {
TPoint( length, 0 ),
TPoint( length - width, width/2 ),
TPoint( 0, width/2 ),
TPoint( 0, -width/2 ),
TPoint( length - width, -width/2 )
};
//座標の変換
for ( int n=0; n<5; ++n ) {
//座標を回転移動
points[n] = TPoint(
points[n].x*cos(rad) - points[n].y*sin(rad),
points[n].x*sin(rad) + points[n].y*cos(rad)
);
//bottomを始点とする位置に移動
points[n].x += bottom.x;
points[n].y += bottom.y;
}
//描画
Image1->Canvas->Polygon( points, 4 );
以上、とりあえず処理の流れを示すサンプルですから、かなり大雑把なもので精度は良くないです。
また、言うまでもないですが、これはあくまで私が思いついたサンプルコードです。
これ以外にももっとスマートなコードが考えられるでしょう。
ご自分で色々と研究してください。
この回答への補足
確かに読み返して見るとよくわからない手順になってました。
申し訳ございません。
再度手順を記載します。
手順1:マウスにて始点となる座標をクリック
手順2:マウスにて終点となる座標をクリック
手順3:終点になった座標から左右に30度開いた線を長さ20で線を引く
(ここで矢印の<が作成される)
手順4:矢印を書いた左右それぞれの終点の座標と手順1、手順2で結んだ
線と平行に始点と垂直になる箇所まで線を引く
手順5:手順4で引かれた線の終点同士をせんで結ぶ
(こうすると鉛筆型の5角形が出来ると考えております)
少しは理解して頂けたでしょうか。
説明が上手くなくご迷惑おかけします。
参考に質問にいたった経緯としては、
始点と終点をを指定したら5角形を作成出来るようにして欲しいと言われ、どうしたらいいのかわからずここでいろいろみて調べていたら
『QNo.57865で矢印を描画するには』という質問に
haru-pさんがサンプルを作成しているプログラムを見て、これを参考にしたら言われた事が出来るのでは??と思ったのですが出来なかったので質問させて頂いた次第です。
参考にしたURLは以下の通りです。
http://kikitai.teacup.com/kotaeru.php3?q=57865
No.3
- 回答日時:
>開発者ガイド
C++Builder付属のマニュアルです。
Personal版にはついてなかったかな?
その場合でもヘルプには収録されています。読みにくいですが。
ラバーバンドのあたりを参考にすると良いかと。
No.2
- 回答日時:
最終的な目的は、鉛筆型5角形を描画することなのでしょうか?
それとも、任意の5角形を描画することなのでしょうか?
鉛筆型5角形ならNo.1のサンプルコードを手直しすればすみます。
No.1補足の仕様であれば、回転前の5角形の各頂点の座標を手直しすればよいはずです。
※マウスで2点の座標を取得する方法は開発者ガイドを参照するということで。
任意の5角形なら別の発想でコーディングする必要がありそうです。
この回答への補足
最終的な目的は鉛筆型の5角形が描画できるこですので、先日作成して頂いたサンプルソフトを手直ししてしたい事は出来るようになりました。
本当にありがとうございました。
ちなみに開発者ガイドってどこにあるのでしょうか?
URLをご教示いただけると幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 数学 角度当てクイズVol.225の解き方おしえてください 1 2023/06/23 17:45
- 数学 ベクトル方程式(ヘッセの標準形)についての質問 2 2022/04/23 18:00
- Illustrator(イラストレーター) 「頂点で線分を伸ばす」作業がうまく行かない。 1 2022/09/09 10:19
- 憲法・法令通則 信号機の表示方式についての疑問です 6 2023/01/18 15:06
- DIY・エクステリア 円の中心の求め方 6 2022/07/17 19:18
- 画像編集・動画編集・音楽編集 Google Earth Pro 高速道路上空を一定の速度で飛ぶツアー動画の作り方は?? 1 2022/06/01 15:10
- その他(職業・資格) 消防設備士甲種4類、設備図の配線の仕方について。 参考書やネットで設備図の例を見ています。そこで質問 1 2023/05/08 19:22
- 地図・道路 バイク 右折時に中央線に寄るタイミング 2 2022/08/28 10:27
- 高校 数学Aの問題で、円に内接するN角形(N>4)の対角線の総数は ア 本である。また、Fの頂点三つからで 1 2023/04/13 17:47
- 数学 数学の質問です。 △ABCにおいて, ∠Aの二等分線が BC と交わる点をRとする。 辺BC, CA 2 2023/07/13 23:58
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
マインクラフト(pc版)で座標...
-
y=x^2の座標をプロットするプロ...
-
3次元空間上の2つの座標から...
-
座標を持った平面範囲に座標を...
-
C言語において、0の座標をキャ...
-
エクセルで回転する座標の出し方
-
プログラミングの問題について...
-
直線と傾きのある楕円の交点を...
-
指定した範囲の反転について
-
N88-BASICのグラフィック、図形...
-
閉図形の座標の配列が右回りか...
-
OpenCvSharp4による画像判定解...
-
多角形の内部かどうか判定する方法
-
シーケンサー(PLC?)で制...
-
以下のプログラムは重心を求め...
-
ガウシアンフィルタのCプログラム
-
Visual C++ 2008 Express Editi...
-
始点、終点の二つの座標と半径...
-
エクセルである点からの距離で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
マインクラフト(pc版)で座標...
-
エクセルである点からの距離で...
-
エクセルで回転する座標の出し方
-
3次元空間上の2つの座標から...
-
始点、終点の二つの座標と半径...
-
c言語でキーボードから2点の座...
-
閉図形の座標の配列が右回りか...
-
以下のプログラムは重心を求め...
-
y=x^2の座標をプロットするプロ...
-
交差する2線分の交点座標の求め方
-
ダイアログ内コントロールの位...
-
シーケンサー(PLC?)で制...
-
ガウシアンフィルタのCプログラム
-
多角形の内部かどうか判定する方法
-
エクセルシート上のマウスポイ...
-
直線上にある点の座標の求め方
-
OpenCvSharp4による画像判定解...
-
C言語 配列で座標
-
ピクチャボックスの座標取得
おすすめ情報