ページ 11

時計の秒針について

Posted: 2012年7月22日(日) 14:25
by 時計
今時計を作ろうとして秒針を書こうとしています。
しかし僕が書いたのじゃあまりにもしょぼすぎます。
秒針に
http://d.hatena.ne.jp/machi_pon/20090509/1241841494
に紹介されているような感じにしたいのですがどうすればいいですか?

コード:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace clock
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //ペン定義
        Pen sec = new Pen(Color.Black, 2);    //秒針ペン
        Pen W = new Pen(Color.White, 2);     //消去ペン


        //変数定義
        double sK, sX, sY;    //秒針角度

        int bX, bY, bX0, bY0;  //秒針座標

        int br = 95;   //秒針の長さ


        private void timer1_Tick(object sender, EventArgs e)
        {
            //描画定義
            Graphics g = pictureBox1.CreateGraphics();

            //現在の時間
            DateTime T = DateTime.Now;
            label1.Text = T.ToString("T");

            //秒針の消去
            g.DrawLine(W, 125, 125, bX0, 250 - bY0);

            //秒針
            sK = T.Second * 6 * 0.01745 - 1.57;   //秒針の角度計算
            sX = Math.Cos(sK) * br;           //終点のX座標
            sY = Math.Sin(sK) * br;            //始点のY座標

            bX = (int)sX; bY = (int)sY;          //int型に変換

            bX = 125 + bX; bY = 125 - bY;      //中心からの終点座標

            bX0 = bX; bY0 = bY;              //消去変数

            g.DrawLine(sec, 125, 125, bX, 250 - bY); //秒針描画
        }
    }
}


Re: 時計の秒針について

Posted: 2012年7月22日(日) 14:26
by 時計
開発環境

visual c# 2010 Ex

Re: 時計の秒針について

Posted: 2012年7月22日(日) 14:40
by softya(ソフト屋)
同じ方ですね?
http://dixq.net/forum/viewtopic.php?f=3&t=11113

フォーラムルールで名前を統一して頂くことになっています。
http://dixq.net/board/board.html
よろしくおねがいします。

Re: 時計の秒針について

Posted: 2012年7月22日(日) 14:42
by softya(ソフト屋)
質問ですが参考サイトに全部書いてあるのでマネするだけだと思いますが何がわからないんでしょうか?
【補足】前の質問を放置しないようにお願いします。

Re: 時計の秒針について

Posted: 2012年7月22日(日) 15:05
by 時計
Pen sec = new Pen(new LinearGradientBrush(new Point(10, 0), new Point(200, 0), Color.Red, Color.Yellow), 2);
これで少しは良くなりました。
形を針のようにしたいのですが、どのようにすればいいでしょうか?

Re: 時計の秒針について

Posted: 2012年7月22日(日) 15:13
by softya(ソフト屋)
時計 さんが書きました:Pen sec = new Pen(new LinearGradientBrush(new Point(10, 0), new Point(200, 0), Color.Red, Color.Yellow), 2);
これで少しは良くなりました。
形を針のようにしたいのですが、どのようにすればいいでしょうか?
名前の統一をお願いしたはずです。
それと参考ページの針の作りかたではダメなのですか?

Re: 時計の秒針について

Posted: 2012年7月22日(日) 15:20
by 33tree
これをどのようにすればいいですか?

コード:

  protected virtual void DrawNeedle(Graphics g)
    {
        PointF ptCenter = GetGuageCenter();
        float sizeGuage = GetGuageSize();
        float radius = sizeGuage / 2 - 16;

        double value = ( this.EndAngle - this.StartAngle ) /
                       ( this.MaxValue - this.MinValue ) *
                       ( this.CurrentValue - this.MinValue ) +
                       this.StartAngle;

        using( GraphicsPath path1 = new GraphicsPath() )
        using( GraphicsPath path2 = new GraphicsPath() )
        {
            PointF pt1 = new PointF( (float)( ptCenter.X + radius * Math.Cos( CalcRadian( value ) ) ),
                                     (float)( ptCenter.Y + radius * Math.Sin( CalcRadian( value ) ) ) );
            PointF pt2 = new PointF( (float)( ptCenter.X + 3 * Math.Cos( CalcRadian( value - 90 ) ) ),
                                     (float)( ptCenter.Y + 3 * Math.Sin( CalcRadian( value - 90 ) ) ) );
            PointF pt3 = new PointF( (float)( ptCenter.X + 3 * Math.Cos( CalcRadian( value + 90 ) ) ),
                                     (float)( ptCenter.Y + 3 * Math.Sin( CalcRadian( value + 90 ) ) ) );

            path1.AddLine( ptCenter, pt1 );
            path1.AddLine( pt1, pt2 );
            path1.CloseFigure();

            path2.AddLine( ptCenter, pt1 );
            path2.AddLine( pt1, pt3 );
            path2.CloseFigure();

            using( SolidBrush br1 = new SolidBrush( ColorUtil.BlendColor( this.NeedleColor, Color.Black, 0.1 ) ) )
            using( SolidBrush br2 = new SolidBrush( this.NeedleColor ) )
            using( Pen pen1 = new Pen( ColorUtil.BlendColor( this.NeedleColor, Color.Black, 0.1 ) ) )
            using( Pen pen2 = new Pen( this.NeedleColor ) )
            {
                g.FillPath( br2, path2 );
                g.DrawPath( pen2, path2 );

                g.FillPath( br1, path1 );
                g.DrawPath( pen1, path1 );
            }
        }

        RectangleF rcCenter = new RectangleF( ptCenter.X - 8, ptCenter.Y - 8, 16, 16 );
        using( LinearGradientBrush br = new LinearGradientBrush( rcCenter, this.NeedleColor, ColorUtil.BlendColor( this.NeedleColor, Color.Black, 0.5 ), 45 ) )
        {
            g.FillEllipse( br, rcCenter );
        }
    }

Re: 時計の秒針について

Posted: 2012年7月22日(日) 15:25
by softya(ソフト屋)
解析して組み込むだけですが、何処が分からないのでしょうか?
ピンポイントで質問をお願いします。

※ なんでもサンプルに頼るのは止めたほうが良いですよ。いつまでも技術が伸びませんから。

【補足】厳しいことを言いますが、細かいところを理解せずサンプルに頼りコピペで済ますことはプログラミングごっこ遊びに過ぎません。
将来的にプログラミングが出来るようになりませんし、サンプルがなければ作れない人になってしまいます。
何かを作りたいと思うのであれば一行一行の役割をちゃんと理解していくことが重要です。
分からないことはお手伝いします。その分からないポイントを質問して下さいね。

Re: 時計の秒針について

Posted: 2012年7月22日(日) 15:29
by asd
前の質問の放置もやめてあげてください。
投稿後に解決処理をしているようですが、前の質問の解決方法が不明です。
http://dixq.net/forum/viewtopic.php?f=3&t=11113

あと、サンプルがそれぞれ何をしているのか理解する気ありますか?
サンプルを動かして、それぞれの処理が何をやっているのかを推測しながら修正してみてまた実行。
すると修正した箇所がどこに影響するのかでそれぞれの処理が何をしているのかがわかると思います。

どうすればいいですか?と丸投げっぽく聞かれても困ってしまいますが・・・^^;

Re: 時計の秒針について

Posted: 2012年7月27日(金) 22:38
by 33tree
仕方なく画像て対応することに決定しました。

Re: 時計の秒針について

Posted: 2012年7月27日(金) 22:41
by softya(ソフト屋)
33tree さんが書きました:仕方なく画像て対応することに決定しました。
サンプルにはコードがあったので理解すれば出来たはずですので残念です。
で、ここのルールなのですが解決したコードを貼り付けてくださるようにお願いします。

Re: 時計の秒針について

Posted: 2012年7月27日(金) 22:50
by 33tree
まだ決定しただけであってプログラムは書いてないです。
適当なプログラムを載せるよりちゃんと書いたプログラムのほうがこの掲示板のためにもなると思うので後日載せる予定でいます。

Re: 時計の秒針について

Posted: 2012年7月27日(金) 22:56
by 33tree
出来る予定のプログラムですがhttp://homepage2.nifty.com/natupaji/DxL ... html#R3N10
でのDrawRotaGraphのサンプルです。

Re: 時計の秒針について

Posted: 2012年7月27日(金) 23:03
by 33tree
http://dixq.net/forum/viewtopic.php?f=3&t=11164
で目盛の質問をしています。
時計の目盛りのさんこうになれば・・・

Re: 時計の秒針について

Posted: 2012年7月27日(金) 23:04
by softya(ソフト屋)
33tree さんが書きました:出来る予定のプログラムですがhttp://homepage2.nifty.com/natupaji/DxL ... html#R3N10
でのDrawRotaGraphのサンプルです。
新しいトピックのプログラムになるのでC#は終わりと言うことですね。分かりました。
「メーターの描画 • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?f=3 ... 920#p89920

Re: 時計の秒針について

Posted: 2012年7月27日(金) 23:06
by 33tree
まずは慣れているc言語で書くことにしました。