実用的なWPFチャートとグラフィックノート

実用的なWPFチャートとグラフィックスNote_00

コメントを理解する垂直線コードの作成のセクションについて

  1. ラインセグメントの長さは、インターフェイス設定値の半分であることに注意してください。

double length = 0.5 * Convert.ToDouble(tbLength.Text);

  1. 本文中のベクトル表現について:

Vector v1 = pt1-pt2;次の
ようになります:
Vector v21 = pt1-pt2;
例:
Vector v12 = new Point(x2、y2)– new Point(x1、y1);

v21がv1.Normalize()を実行した後、正規化:
ここに写真の説明を挿入
v21がv1 * =長さを実行した後;長さ変換後:
ここに写真の説明を挿入

pt3 = pt2 +新しいベクトル;

私たちが知っているように:
pt1 = v21 + pt2
新しいベクトル= v21 * m1
ここでの新しい点新しいベクトルのpt3は古い点pt1から来ているので、次のようになります
。pt3= pt2 + v21 * m1;

これは、次の図のコードです。

pt3 = pt2 + v1 * m1;

ここに写真の説明を挿入
3. pt4の計算は、ベクトルの回転方向が反対であることを除いて、同様です。

ここに写真の説明を挿入
4.ソースコードのスタイルは少し乱雑で時代遅れです。コードは作成者によってコンパイルされ、次のように2つの45度の直線が追加されています。

namespace PerpendicularLine
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        private Line line1;
        private Line line2;
        private Line line3;
        private Line line4;

        public MainWindow()
        {
            InitializeComponent();

            Rectangle rect = new Rectangle
            {
                Stroke = Brushes.Black,
                Width = canvas1.Width,
                Height = canvas1.Height
            };
            canvas1.Children.Add(rect);

            AddLines();
        }

        private void AddLines()
        {
            Point pt1 = new Point();
            Point pt2 = new Point();

            double length = 0.5 * Convert.ToDouble(tbLength.Text);

            line1 = new Line
            {
                Stroke = Brushes.Pink,
                StrokeThickness = 4
            };

            pt1.X = Convert.ToDouble(tbX1.Text);
            pt1.Y = Convert.ToDouble(tbY1.Text);
            pt2.X = Convert.ToDouble(tbX2.Text);
            pt2.Y = Convert.ToDouble(tbY2.Text);

            line1.X1 = pt1.X;
            line1.Y1 = pt1.Y;
            line1.X2 = pt2.X;
            line1.Y2 = pt2.Y;

            canvas1.Children.Add(line1);

            Canvas.SetLeft(tbPoint1, pt1.X);
            Canvas.SetTop(tbPoint1, pt1.Y);
            Canvas.SetLeft(tbPoint2, pt2.X);
            Canvas.SetTop(tbPoint2, pt2.Y);
            tbPoint1.Text = "Pt1(" + pt1.ToString() + ")";
            tbPoint2.Text = "Pt2(" + pt2.ToString() + ")";

            Vector v21 = pt1 - pt2;
            v21.Normalize();
            v21 *= length;


            Matrix TempMatrix = new Matrix();
            TempMatrix.Rotate(-90);
            Point pt3 = pt2 + v21 * TempMatrix;

            TempMatrix = new Matrix();
            TempMatrix.Rotate(90);
            Point pt4 = pt2 + v21 * TempMatrix;

            TempMatrix = new Matrix();
            TempMatrix.Rotate(-45);
            Point pt23 = pt2 + v21 * TempMatrix;

            TempMatrix = new Matrix();
            TempMatrix.Rotate(45);
            Point pt24 = pt2 + v21 * TempMatrix;

            line3 = new Line
            {
                Stroke = Brushes.Green,
                X1 = pt2.X,
                Y1 = pt2.Y,
                X2 = pt23.X,
                Y2 = pt23.Y
            };

            line4 = new Line
            {
                Stroke = Brushes.Green,
                X1 = pt2.X,
                Y1 = pt2.Y,
                X2 = pt24.X,
                Y2 = pt24.Y
            };

            line2 = new Line
            {
                Stroke = Brushes.Green,
                StrokeThickness = 4,
                StrokeDashArray = DoubleCollection.Parse("3, 1"),

                X1 = pt3.X,
                Y1 = pt3.Y,
                X2 = pt4.X,
                Y2 = pt4.Y
            };

            canvas1.Children.Add(line2);
            canvas1.Children.Add(line3);
            canvas1.Children.Add(line4);

            Canvas.SetLeft(tbPoint3, pt3.X);
            Canvas.SetTop(tbPoint3, pt3.Y);
            Canvas.SetLeft(tbPoint4, pt4.X);
            Canvas.SetTop(tbPoint4, pt4.Y);
            pt3.X = Math.Round(pt3.X, 0);
            pt3.Y = Math.Round(pt3.Y, 0);
            pt4.X = Math.Round(pt4.X, 0);
            pt4.Y = Math.Round(pt4.Y, 0);
            tbPoint3.Text = "Pt3(" + pt3.ToString() + ")";
            tbPoint4.Text = "Pt4(" + pt4.ToString() + ")";
        }

        public void BtnApply_Click(object sender, EventArgs e)
        {
            if (line1 != null)
                canvas1.Children.Remove(line1);
            if (line2 != null)
                canvas1.Children.Remove(line2);
            if (line3 != null)
                canvas1.Children.Remove(line3);
            if (line4 != null)
                canvas1.Children.Remove(line4);
            AddLines();
        }
        public void BtnClose_Click(object sender, EventArgs e)
        {
            this.Close();
        }

    }
}

結果は次のとおりです。

ここに写真の説明を挿入

おすすめ

転載: blog.csdn.net/lm393485/article/details/108888574