最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

WPF如何在圓形上優(yōu)雅地添加刻度線

 更新時間:2024年11月21日 11:31:33   作者:Cyril-Hcj  
這篇文章主要為大家詳細(xì)介紹了WPF如何在圓形上優(yōu)雅地添加刻度線,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

思路

我們可以使用Ellipse先畫出一個圓當(dāng)背景,然后用Canvas再疊加畫上刻度線,就能得到如下的效果

我們先用Ellipse畫一個橙色的圓,然后將Canvas的寬度和高度綁定到Ellipse的寬度和高度

<Grid>
        <Ellipse Fill="Orange" Width="400" Height="400" Name="BackEllipse"/>
        <Canvas x:Name="MainCanvas" 
                Width="{Binding Width,ElementName=BackEllipse}"
                Height="{Binding Height,ElementName=BackEllipse}"/>
</Grid>

然后我們現(xiàn)在只需要知道點的位置,就可以通過canvas畫出相應(yīng)的線條了.

計算圓上點的位置

假設(shè)我們要計算的點為X,那么隊員X點的坐標(biāo)為(X1,Y1)

sin(a)=Y1/r   =>  Y1=r*sin(a)

cos(a)=X1/r  =>  X1=r*cos(a)

使用Math.Sin來計算的話得先把角度轉(zhuǎn)換為弧度

角度轉(zhuǎn)換為弧度

參考文末補充內(nèi)容

1、角度定義

兩條射線從圓心向圓周射出,形成一個夾角和夾角正對的一段弧。當(dāng)弧長正好等于圓周長的360分之一時,兩條射線的夾角的大小為1度。(單位: º)

2、弧度定義
兩條射線從圓心向圓周射出,形成一個夾角和夾角正對的一段弧。當(dāng)這段弧長正好等于圓的半徑時,兩條射線的夾角大小為1弧度(單位:rad)

即弧度 = 弧長 / 半徑

圓一周的弧度=周長 / 半徑  =>  2πr / r =360º   =>   π=180º,繼而可以知道一弧度等于180º/π

 可知:sin(30º)=Math.Sin(30*Math.PI / 180)

使用canvas畫出線段

我們只需要計算出X點和Z點的坐標(biāo),就能使用Line來連接兩點畫出刻度線了.

假設(shè)Z所在的圓的半徑為r,X所在的圓的半徑為(r-20)

double radius = BackEllipse.Width / 2;
    
            Line lineScale = new Line();
            lineScale.X1 = (radius - 20) * Math.Cos(30 * Math.PI / 180);
            lineScale.Y1 = (radius - 20) * Math.Sin(30 * Math.PI / 180);
            lineScale.X2 = radius * Math.Cos(30 * Math.PI / 180);
            lineScale.Y2 = radius * Math.Sin(30 * Math.PI / 180);

            lineScale.Stroke = Brushes.Red;
            lineScale.StrokeThickness = 2;
            MainCanvas.Children.Add(lineScale);

可以得到圖像

我們先把把canvas用藍色填充,然后把X點設(shè)為(0,0)來看下效果可知,圓心的位置為左上角,我們可以先把刻度都畫出來,再移動下canvas繪畫的起點到橙色圓的圓心就行了

我們把360度分成100分來畫出100個刻度線,代碼如下

double radius = BackEllipse.Width / 2;
            
            double min = 0; double max = 100;
            double step = 360.0 / (max - min);

            for (int i = 0; i < max - min; i++)
            {
                Line lineScale = new Line
                {
                    X1 = (radius - 20) * Math.Cos(i * step * Math.PI / 180),
                    Y1 = (radius - 20) * Math.Sin(i * step * Math.PI / 180),
                    X2 = radius * Math.Cos(i * step * Math.PI / 180),
                    Y2 = radius * Math.Sin(i * step * Math.PI / 180),
                    Stroke = Brushes.Red,
                    StrokeThickness = 2
                };

                MainCanvas.Children.Add(lineScale);
            }

我們只需要把X點和Z點都加上半徑就能把canvas繪畫的起點移動到圓心的位置,把canvas的背景色去掉效果就實現(xiàn)我們想要的效果了

完整的代碼如下

前臺代碼

<Grid>
        <Ellipse Fill="Orange" Width="400" Height="400" Name="BackEllipse"/>
        <Canvas x:Name="MainCanvas" 
                Width="{Binding Width,ElementName=BackEllipse}"
                Height="{Binding Height,ElementName=BackEllipse}"/>
    </Grid>

后臺代碼

public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            DoDraw();
        }

        private void DoDraw()
        {
            double radius = BackEllipse.Width / 2;

            double min = 0; double max = 100;
            double step = 360.0 / (max - min);

            for (int i = 0; i < max - min; i++)
            {
                Line lineScale = new Line
                {
                    X1 = ((radius - 20) * Math.Cos(i * step * Math.PI / 180)) + radius,
                    Y1 = ((radius - 20) * Math.Sin(i * step * Math.PI / 180)) + radius,
                    X2 = (radius * Math.Cos(i * step * Math.PI / 180)) + radius,
                    Y2 = (radius * Math.Sin(i * step * Math.PI / 180)) + radius,
                    Stroke = Brushes.Red,
                    StrokeThickness = 2
                };

                MainCanvas.Children.Add(lineScale);
            }
        }
    }

知識補充

角度與弧度互轉(zhuǎn)

1、角度定義

兩條射線從圓心向圓周射出,形成一個夾角和夾角正對的一段弧。當(dāng)弧長正好等于圓周長的360分之一時,兩條射線的夾角的大小為1度。(單位: º)

2、弧度定義

兩條射線從圓心向圓周射出,形成一個夾角和夾角正對的一段弧。當(dāng)這段弧長正好等于圓的半徑時,兩條射線的夾角大小為1弧度(單位:rad)。
可簡單理解為: 弧度 = 弧長 / 半徑

3、弧長與弧度

圓的周長C的計算公式為:C = 2πr = πd    (r - 半徑;d - 直徑)

圓一周的弧長為:2πr                     (弧長 = 周長)  

圓一周的弧度為:2πr / r = 2π                  (根據(jù): 弧度 = 弧長 / 半徑) 

4、度與角度的轉(zhuǎn)換

根據(jù)圓為360 º,弧度為2π,即 360º = 2π 

角度轉(zhuǎn)弧度:2π / 360  = π / 180 ≈ 0.0174rad, 即: 度數(shù) * (π / 180) = 弧度

例如:將30º轉(zhuǎn)為弧度rad 

30º * (π / 180)= 0.523320 rad 

弧度轉(zhuǎn)角度: 360 / 2π  = 180 / π ≈ 57.3º,  即:   弧度 * (180 / π) = 度數(shù)

例如:將0.523320rad轉(zhuǎn)為度º

0.523320rad * (180 / π) = 29.9992352688º 

到此這篇關(guān)于WPF如何在圓形上優(yōu)雅地添加刻度線的文章就介紹到這了,更多相關(guān)WPF圓形添加刻度線內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 探秘Unity游戲開發(fā)中的狀態(tài)設(shè)計模式

    探秘Unity游戲開發(fā)中的狀態(tài)設(shè)計模式

    這篇文章主要介紹了探秘Unity游戲開發(fā)中的狀態(tài)設(shè)計模式,狀態(tài)模式是Unity游戲開發(fā)中常用的一種設(shè)計模式,可以幫助開發(fā)者更好地管理游戲?qū)ο鬆顟B(tài),提高游戲的可維護性和可擴展性
    2023-05-05
  • c# 實現(xiàn)KMP算法的示例代碼

    c# 實現(xiàn)KMP算法的示例代碼

    這篇文章主要介紹了c# 實現(xiàn)KMP算法的示例代碼,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-11-11
  • .NET垃圾回收器(GC)原理淺析

    .NET垃圾回收器(GC)原理淺析

    這篇文章主要介紹了.NET垃圾回收器(GC)原理淺析,本文先是講解了一些基礎(chǔ)知識如托管堆(Managed Heap)、CPU寄存器(CPU Register)、根(Roots)等,然后講解了垃圾回收的基本原理、算法等,需要的朋友可以參考下
    2015-01-01
  • C#?Winform消息通知系統(tǒng)托盤氣泡提示框ToolTip控件

    C#?Winform消息通知系統(tǒng)托盤氣泡提示框ToolTip控件

    這篇文章主要為大家介紹了C#或Winform中的消息通知之系統(tǒng)托盤的氣泡提示框窗口(系統(tǒng)toast通知)、ToolTip控件和ToolTipText屬性詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • VS2019打包WPF安裝程序最新教程(圖文詳解)

    VS2019打包WPF安裝程序最新教程(圖文詳解)

    這篇文章主要介紹了VS2019打包WPF安裝程序最新教程,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-11-11
  • 基于C#調(diào)用OCX控件的常用方法(推薦)

    基于C#調(diào)用OCX控件的常用方法(推薦)

    下面小編就為大家分享一篇基于C#調(diào)用OCX控件的常用方法推薦,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • C#數(shù)據(jù)庫操作的用法

    C#數(shù)據(jù)庫操作的用法

    這篇文章主要介紹了C#數(shù)據(jù)庫操作的三種經(jīng)典用法
    2015-10-10
  • unity3d?對接?workerman?實現(xiàn)聯(lián)機游戲功能

    unity3d?對接?workerman?實現(xiàn)聯(lián)機游戲功能

    workerman?是一款開源高性能?PHP?應(yīng)用容器,他除了用于互聯(lián)網(wǎng)、即時通訊、APP?開發(fā)、硬件通訊、智能家居、物聯(lián)網(wǎng)等領(lǐng)域的開發(fā)外,這篇文章主要介紹了unity3d?對接?workerman?實現(xiàn)聯(lián)機游戲,需要的朋友可以參考下
    2022-10-10
  • C#匿名委托和Java匿名局部內(nèi)部類使用方法示例

    C#匿名委托和Java匿名局部內(nèi)部類使用方法示例

    Java在嵌套類型這里提供的特性比較多,假設(shè):Java的字節(jié)碼只支持靜態(tài)嵌套類,內(nèi)部類、局部內(nèi)部類和匿名局部內(nèi)部類都是編譯器提供的語法糖,這個假設(shè)目前沒法驗證(看不懂字節(jié)碼),本文先來看一下C#是如何為我們提供的這種語法糖
    2013-11-11
  • WCF實現(xiàn)進程間管道通信Demo分享

    WCF實現(xiàn)進程間管道通信Demo分享

    下面小編就為大家分享一篇WCF實現(xiàn)進程間管道通信Demo,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12

最新評論

呈贡县| 东丰县| 册亨县| 万荣县| 永川市| 沙雅县| 青龙| 靖江市| 柳州市| 沙田区| 和顺县| 台州市| 五大连池市| 育儿| 神池县| 平安县| 会泽县| 丹江口市| 疏附县| 洞口县| 江都市| 商洛市| 女性| 盐源县| 宝丰县| 沙河市| 桃江县| 河间市| 永平县| 泗水县| 定襄县| 海口市| 绥滨县| 六盘水市| 益阳市| 略阳县| 县级市| 杭锦后旗| 宁远县| 通渭县| 邯郸县|