WPF中的图形对象

news2024/11/15 10:45:43

前言

在WPF中可以根据需要在前台绘制自己所需要的几何开状,可设置性很丰富,而且在xaml中很好的实时性,如果是设计时还可以考虑使用Blend for Visual Studio来添加元素,它的设计交互性更高。

1、形状基类Shape

为 Ellipse、Polygon 和 Rectangle 之类的形状元素提供基类。

继承:

派生:

System.Windows.Shapes.Ellipse

System.Windows.Shapes.Line

System.Windows.Shapes.Path

System.Windows.Shapes.Polygon

System.Windows.Shapes.Polyline

System.Windows.Shapes.Rectangle

2、线Line

在两个点之间绘制直线。它的几何位置,主要由X1、Y1、X2、Y2来确定,并且它们是依赖属性。

代码方式创建:

// Add a Line Element
myLine = new Line();
myLine.Stroke = System.Windows.Media.Brushes.LightSteelBlue;
myLine.X1 = 1;
myLine.X2 = 50;
myLine.Y1 = 1;
myLine.Y2 = 50;
myLine.HorizontalAlignment = HorizontalAlignment.Left;
myLine.VerticalAlignment = VerticalAlignment.Center;
myLine.StrokeThickness = 2;

前台界面方式创建:

 <Grid>
     <Line X1="10" Y1="20" X2="260" Y2="20" Stroke="Red" StrokeThickness="10"/>
     <Line X1="10" Y1="40" X2="260" Y2="40" Stroke="Orange" StrokeThickness="6"/>
     <Line X1="10" Y1="60" X2="260" Y2="60" Stroke="Green" StrokeThickness="3"/>
     <Line X1="10" Y1="80" X2="260" Y2="80" Stroke="Purple" StrokeThickness="2"/>
     <Line X1="10" Y1="100" X2="260" Y2="100" Stroke="Black" StrokeThickness="1"/>
     <Line X1="10" Y1="120" X2="260" Y2="120" StrokeDashArray="3" Stroke="Black" StrokeThickness="1"/>
     <Line X1="10" Y1="140" X2="260" Y2="140"  Stroke="Black" StrokeDashArray="5"  StrokeThickness="6"/>
     <Line X1="10" Y1="160" X2="260" Y2="160"  Stroke="Black" StrokeEndLineCap="Flat" StrokeThickness="6"/>
     <Line X1="10" Y1="180" X2="260" Y2="180"  Stroke="Black" StrokeEndLineCap="Triangle" StrokeThickness="8"/>
     <Line X1="10" Y1="200" X2="260" Y2="200"   StrokeEndLineCap="Round" StrokeThickness="10">
         <Line.Stroke>
             <LinearGradientBrush EndPoint="0,0.5" StartPoint="1,0.5">
                 <GradientStop Color="Blue"/>
                 <GradientStop Offset="1"/>
             </LinearGradientBrush>
         </Line.Stroke>
     </Line>
 </Grid>

效果:

3、Rectangle矩形

代码方式:

// Add a Rectangle Element
myRect = new System.Windows.Shapes.Rectangle();
myRect.Stroke = System.Windows.Media.Brushes.Black;
myRect.Fill = System.Windows.Media.Brushes.SkyBlue;
myRect.HorizontalAlignment = HorizontalAlignment.Left;
myRect.VerticalAlignment = VerticalAlignment.Center;
myRect.Height = 50;
myRect.Width = 50;

前台方式:

  <Grid Margin="10">
      <Grid.RowDefinitions>
          <RowDefinition Height="160"/>
          <RowDefinition Height="10"/>
          <RowDefinition Height="160"/>
      </Grid.RowDefinitions>
      <Grid.ColumnDefinitions>
          <ColumnDefinition Width="180"/>
          <ColumnDefinition Width="10"/>
          <ColumnDefinition Width="180"/>
          <ColumnDefinition Width="10"/>
          <ColumnDefinition Width="180"/>
      </Grid.ColumnDefinitions>
      <!--实心填充-->
      <Rectangle Grid.Column="0" Grid.Row="0" Stroke="Black" Fill="LightBlue"/>
      <!--线性渐变-->
      <Rectangle Grid.Column="2" Grid.Row="0">
          <Rectangle.Fill>
              <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
                  <GradientStop Color="#FFB6F8F1" Offset="0"/>
                  <GradientStop Color="#FF0082BD" Offset="0.25"/>
                  <GradientStop Color="#FF95DEFF" Offset="0.6"/>
                  <GradientStop Color="#FF004F72" Offset="1"/>
              </LinearGradientBrush>
          </Rectangle.Fill>
      </Rectangle>
      <!--径向渐变-->
      <Rectangle Grid.Column="4" Grid.Row="0">
          <Rectangle.Fill>
              <RadialGradientBrush>
                  <GradientStop Color="#FFB6F8F1" Offset="0"/>
                  <GradientStop Color="#FF0082BD" Offset="0.25"/>
                  <GradientStop Color="#FF95DEFF" Offset="0.75"/>
                  <GradientStop Color="#FF004F72" Offset="1.5"/>
              </RadialGradientBrush>
          </Rectangle.Fill>
      </Rectangle>
      
      <!--图片填充-->
      <Rectangle Grid.Column="0" Grid.Row="2">
          <Rectangle.Fill>
              <ImageBrush ImageSource="123.png" Viewport="0,0,0.3,0.15" TileMode="Tile"/>
          </Rectangle.Fill>
      </Rectangle>
      <!--矢量图填充-->
      <Rectangle Grid.Column="2" Grid.Row="2">
          <Rectangle.Fill>
              <DrawingBrush Viewport="0,0,0.2,0.2" TileMode="Tile">
                  <DrawingBrush.Drawing>
                      <GeometryDrawing Brush="LightBlue">
                          <GeometryDrawing.Geometry>
                              <EllipseGeometry RadiusX="10" RadiusY="10"/>
                          </GeometryDrawing.Geometry>
                      </GeometryDrawing>
                  </DrawingBrush.Drawing>
              </DrawingBrush>
          </Rectangle.Fill>
      </Rectangle>
      <!--无填充,用线性渐变填充连线-->
      <Rectangle Grid.Column="4" Grid.Row="2" StrokeThickness="10">
          <Rectangle.Stroke>
              <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
                  <GradientStop Color="White" Offset="0.3"/>
                  <GradientStop Color="Blue" Offset="1"/>
              </LinearGradientBrush>
          </Rectangle.Stroke>
      </Rectangle>
  </Grid>

效果:

4、Path 类

绘制一系列相互连接的直线和曲线。

代码方式:

//Add the Path Element
myPath = new Path();
myPath.Stroke = System.Windows.Media.Brushes.Black;
myPath.Fill = System.Windows.Media.Brushes.MediumSlateBlue;
myPath.StrokeThickness = 4;
myPath.HorizontalAlignment = HorizontalAlignment.Left;
myPath.VerticalAlignment = VerticalAlignment.Center;
EllipseGeometry myEllipseGeometry = new EllipseGeometry();
myEllipseGeometry.Center = new System.Windows.Point(50,50);
myEllipseGeometry.RadiusX = 25;
myEllipseGeometry.RadiusY = 25;
myPath.Data = myEllipseGeometry;

前台:

 <Path Stroke="Green" Fill="LawnGreen" StrokeThickness="2">
     <Path.Data>
         <PathGeometry>
             <PathFigure IsClosed="True" StartPoint="0,0">
                 <LineSegment Point="150,0"/>
                 <LineSegment Point="150,30"/>
                 <LineSegment Point="90,30"/>
                 <LineSegment Point="90,150"/>
                 <LineSegment Point="60,150"/>
                 <LineSegment Point="60,30"/>
                 <LineSegment Point="0,30"/>
             </PathFigure>
         </PathGeometry>
     </Path.Data>
 </Path>

效果:

你会发现它是由PathGeometry来指定它的数据是什么,而PathGeometry 类表示一个可能由弧、曲线、椭圆、直线和矩形组成的复杂形状。所以你可以画出一个十分复杂的图像(当然你要有相像力)。

画线示例:

<Grid Margin="15">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="1*"/>
        <ColumnDefinition Width="1*"/>
        <ColumnDefinition Width="1*"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="1*"/>
        <RowDefinition Height="1*"/>
        <RowDefinition Height="1*"/>
    </Grid.RowDefinitions>
    <Path Stroke="Black" StrokeThickness="2" Grid.Column="0" Grid.Row="0">
        <Path.Data>
            <PathGeometry>
                <PathFigure StartPoint="0,0">
                    <ArcSegment Point="100,100" Size="50,25" SweepDirection="Clockwise" IsLargeArc="True" RotationAngle="0"/>
                </PathFigure>
            </PathGeometry>
        </Path.Data>
    </Path>
    <Path Stroke="Black" StrokeThickness="2" Grid.Column="1" Grid.Row="0">
        <Path.Data>
            <PathGeometry>
                <PathFigure StartPoint="0,0">
                    <ArcSegment Point="100,100" Size="50,25" SweepDirection="Clockwise" IsLargeArc="True" RotationAngle="0"/>
                </PathFigure>
            </PathGeometry>
        </Path.Data>
    </Path>
    <Path Stroke="Black" StrokeThickness="2" Grid.Column="2" Grid.Row="0">
        <Path.Data>
            <PathGeometry>
                <PathFigure StartPoint="0,0">
                    <ArcSegment Point="100,100" Size="50,25" SweepDirection="Clockwise" IsLargeArc="True" RotationAngle="0"/>
                </PathFigure>
            </PathGeometry>
        </Path.Data>
    </Path>



    <Path Stroke="Black" StrokeThickness="2" Grid.Column="0" Grid.Row="1">
        <Path.Data>
            <PathGeometry>
                <PathFigure StartPoint="0,0">
                    <ArcSegment Point="100,100" Size="50,25" SweepDirection="Clockwise" IsLargeArc="True" RotationAngle="45"/>
                </PathFigure>
            </PathGeometry>
        </Path.Data>
    </Path>
    <Path Stroke="Black" StrokeThickness="2" Grid.Column="1" Grid.Row="1">
        <Path.Data>
            <PathGeometry>
                <PathFigure StartPoint="0,0">
                    <ArcSegment Point="100,100" Size="60,25" SweepDirection="Clockwise" IsLargeArc="True" RotationAngle="0"/>
                </PathFigure>
            </PathGeometry>
        </Path.Data>
    </Path>
    <Path Stroke="Black" StrokeThickness="2" Grid.Column="2" Grid.Row="1">
        <Path.Data>
            <PathGeometry>
                <PathFigure StartPoint="0,0">
                    <ArcSegment Point="150,100" Size="50,25" SweepDirection="Clockwise" IsLargeArc="True" RotationAngle="0"/>
                </PathFigure>
            </PathGeometry>
        </Path.Data>
    </Path>


    <Path Stroke="Black" StrokeThickness="2" Grid.Column="0" Grid.Row="2">
        <Path.Data>
            <PathGeometry>
                <PathFigure StartPoint="0,0">
                    <ArcSegment Point="100,100" Size="50,25" SweepDirection="Clockwise" IsLargeArc="True" RotationAngle="90"/>
                </PathFigure>
            </PathGeometry>
        </Path.Data>
    </Path>
    <Path Stroke="Black" StrokeThickness="2" Grid.Column="1" Grid.Row="2">
        <Path.Data>
            <PathGeometry>
                <PathFigure StartPoint="0,0">
                    <ArcSegment Point="100,100" Size="50,60" SweepDirection="Clockwise" IsLargeArc="True" RotationAngle="0"/>
                </PathFigure>
            </PathGeometry>
        </Path.Data>
    </Path>
    <Path Stroke="Black" StrokeThickness="2" Grid.Column="2" Grid.Row="2">
        <!--<Path.Data>
            <PathGeometry>
                <PathFigure StartPoint="0,0">
                    <BezierSegment Point1="250,0" Point2="50,200" Point3="300,200"/>
                </PathFigure>
            </PathGeometry>
        </Path.Data>-->
        <!--二次方贝塞尔曲线-->
        <Path.Data>
            <PathGeometry>
                <PathFigure StartPoint="0,200">
                    <QuadraticBezierSegment Point1="150,-100" Point2="300,200"/>
                </PathFigure>
            </PathGeometry>
        </Path.Data>
    </Path>
</Grid>

    <Grid>
        <Path Stroke="Black" Fill="LightBlue" StrokeThickness="1">
            <Path.Data>
                <GeometryGroup>
                    <PathGeometry>
                        <PathFigure StartPoint="0,0">
                            <BezierSegment Point1="250,0" Point2="50,200" Point3="300,200"/>
                        </PathFigure>
                    </PathGeometry>
                    <PathGeometry>
                        <PathFigure StartPoint="0,0">
                            <BezierSegment Point1="230,0" Point2="50,200" Point3="300,200"/>
                        </PathFigure>
                    </PathGeometry>
                    <PathGeometry>
                        <PathFigure StartPoint="0,0">
                            <BezierSegment Point1="210,0" Point2="50,200" Point3="300,200"/>
                        </PathFigure>
                    </PathGeometry>
                    <PathGeometry>
                        <PathFigure StartPoint="0,0">
                            <BezierSegment Point1="190,0" Point2="50,200" Point3="300,200"/>
                        </PathFigure>
                    </PathGeometry>
                    <PathGeometry>
                        <PathFigure StartPoint="0,0">
                            <BezierSegment Point1="170,0" Point2="50,200" Point3="300,200"/>
                        </PathFigure>
                    </PathGeometry>
                    <PathGeometry>
                        <PathFigure StartPoint="0,0">
                            <BezierSegment Point1="150,0" Point2="50,200" Point3="300,200"/>
                        </PathFigure>
                    </PathGeometry>
                    <PathGeometry>
                        <PathFigure StartPoint="0,0">
                            <BezierSegment Point1="130,0" Point2="50,200" Point3="300,200"/>
                        </PathFigure>
                    </PathGeometry>
                </GeometryGroup>
            </Path.Data>
        </Path>
    </Grid>

5、Ellipse 类

绘制椭圆形。它的高度和高度指定一样时就会画一个整圆,不一致就是一个椭圆,为什么呢?因为椭圆和圆的区别就是如此。

代码创建:

// Add an Ellipse Element
myEllipse = new Ellipse();
myEllipse.Stroke = System.Windows.Media.Brushes.Black;
myEllipse.Fill = System.Windows.Media.Brushes.DarkBlue;
myEllipse.HorizontalAlignment = HorizontalAlignment.Left;
myEllipse.VerticalAlignment = VerticalAlignment.Center;
myEllipse.Width = 50;
myEllipse.Height = 75;
myGrid.Children.Add(myEllipse);

前台:


        <Ellipse x:Name="ballR" Height="36" Width="60" Fill="Red" HorizontalAlignment="Left"/>
        <Ellipse x:Name="ballG" Height="36" Width="36" Fill="LawnGreen" HorizontalAlignment="Left"/>
        <Ellipse x:Name="ballB" Height="36" Width="36"  StrokeThickness="5" Stroke="DeepSkyBlue" HorizontalAlignment="Left"/>

效果:

6、Polygon 类

绘制多边形,它是由一系列相互连接的线条构成的闭合形状。是一组点绘制而成。

//Add the Polygon Element
myPolygon = new Polygon();
myPolygon.Stroke = System.Windows.Media.Brushes.Black;
myPolygon.Fill = System.Windows.Media.Brushes.LightSeaGreen;
myPolygon.StrokeThickness = 2;
myPolygon.HorizontalAlignment = HorizontalAlignment.Left;
myPolygon.VerticalAlignment = VerticalAlignment.Center;
System.Windows.Point Point1 = new System.Windows.Point(1, 50);
System.Windows.Point Point2 = new System.Windows.Point(10,80);
System.Windows.Point Point3 = new System.Windows.Point(50,50);
PointCollection myPointCollection = new PointCollection();
myPointCollection.Add(Point1);
myPointCollection.Add(Point2);
myPointCollection.Add(Point3);
myPolygon.Points = myPointCollection;
myGrid.Children.Add(myPolygon);
 <Polygon Points="360,44.76 276.97294,224.03418 487.00013,104.02468 236.5639,88.9593 417.01795,223.77416" StrokeThickness="2" Stroke="Red"/>

7、Polyline 类

绘制一系列相互连接的直线。

代码创建:

// Add the Polyline Element
myPolyline = new Polyline();
myPolyline.Stroke = System.Windows.Media.Brushes.SlateGray;
myPolyline.StrokeThickness = 2;
myPolyline.FillRule = FillRule.EvenOdd;
System.Windows.Point Point4 = new System.Windows.Point(1, 50);
System.Windows.Point Point5 = new System.Windows.Point(10, 80);
System.Windows.Point Point6 = new System.Windows.Point(20, 40);
PointCollection myPointCollection2 = new PointCollection();
myPointCollection2.Add(Point4);
myPointCollection2.Add(Point5);
myPointCollection2.Add(Point6);
myPolyline.Points = myPointCollection2;
myGrid.Children.Add(myPolyline);

 

 <Polyline Points="360,44.76 276.97294,224.03418 487.00013,104.02468 236.5639,88.9593 417.01795,223.77416" Stroke="Red"/>


 <Polyline Fill="LightSeaGreen" StrokeThickness="2" Stroke="Black" HorizontalAlignment="Left" VerticalAlignment="Center">
     <Polyline.Points>
         <Point X="1" Y="50"/>
         <Point X="10" Y="80"/>
         <Point X="50" Y="50"/>
     </Polyline.Points>

 </Polyline>

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1995067.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ATG(地空通信)

█ 到底什么是ATG&#xff1f; ATG&#xff0c;就是Air To Ground&#xff0c;空对地通信&#xff0c;也叫地空通信。 它是一种非常特殊的通信技术&#xff0c;专门为天上的飞机提供服务。 简单来说&#xff0c;就是沿着飞机的航线&#xff0c;设置大量的地面基站。基站天线…

Simulink函数如何绑定到状态

Simulink函数的绑定行为 当Simulink函数位于某个状态内时&#xff0c;该函数会绑定到该状态。绑定会导致以下行为&#xff1a; 函数调用只能在状态操作和状态及其子状态内的转换中发生。 当进入状态时&#xff0c;该功能启用。 当状态退出时&#xff0c;该功能被禁用。 例如&…

Mysql——一条SQL语句的执行流程

一、Mysql的体系结构 架构图&#xff1a; Mysql的体系结构主要分为以下几层&#xff1a; 1. Connectors 连接层&#xff1a;负责处理客户端的请求连接。 系统在访问Mysql的服务器之前会先与服务器建立TCP连接&#xff0c;连接成功后Mysql会对TCP传输过来的用户信息做权限验…

新型技术融合推动渲染技术的发展

随着计算机图形学的不断进步&#xff0c;渲染技术作为其核心组成部分&#xff0c;正经历着前所未有的变革与发展。在未来的几年中&#xff0c;AI、量子计算以及新型硬件技术的融合&#xff0c;将为渲染技术带来革命性的突破&#xff0c;进一步推动其在影视制作、游戏设计、建筑…

爬虫基础2

网页请求原理: 在浏览器上输入一个网址,计算机是不理解这个信息的,会向运营商服务器发送请求告知输入网址的IP地址,然后根据IP地址向对应的服务器发送请求,服务器就会返回一个HTML文件,浏览器会解析HTML文件,即我们看到的网页 根据层级关系来进行爬虫 在python里面相同的缩进表…

职场要懂“3不急”,否则走不远

在职场中&#xff0c;我们经常会遇到各种各样的人和事&#xff0c;有的同事能够得到领导的重视和喜爱&#xff0c;有的则始终处于“不温不火”的状态&#xff0c;这其中到底是什么原因导致的呢&#xff1f; 其实&#xff0c;很大一部分原因是因为在工作中犯了一些“急于表现”…

少儿编程 2024年6月scratch四级 电子学会图形化编程等级考试四级真题和答案解析(判断题)

2024年6月scratch编程等级考试四级真题 判断题&#xff08;共10题&#xff0c;每题2分&#xff0c;共20分&#xff09; 11、机器人程序如下图所示&#xff0c;当输入行动代码为”WWDDSSAA”时&#xff0c;机器人绘制的行动轨迹如下右图所示 答案&#xff1a;错 考点分析&…

【面试题】设计模式-责任链模式

设计模式-责任链模式 前言责任链简历案例代码小结 前言 我们知道&#xff0c;设计模式是面试时经常被问到的问题之一&#xff0c;这是因为设计模式能够体现出代码设计的美感&#xff0c;且在很多框架的底层也都会使用到各种设计模式&#xff0c;所以对设计模式的考察&#xff…

GNSS天线误差改正

根据原理解析了PPPH中关于天线误差改正部分的源代码&#xff0c;处理了卫星、接收机天线相位中心偏差、接收机天线高误差、天线相位缠绕误差&#xff0c;但是对于天线相位中心变化PCV误差并没有处理&#xff0c;该误差与卫星高度角方位角有关&#xff0c;在读取天线文件数据后需…

PDF转Markdown的利器(MinerU版)

嘿&#xff0c;技术爱好者们&#xff01;今天&#xff0c;我要向你们介绍一个令人兴奋的开源项目——MinerU&#xff0c;这是一个一站式的高质量数据提取工具&#xff0c;它支持从PDF、网页和多格式电子书中提取数据。 MinerU&#xff1a;一站式开源数据提取工具 自制ModelSco…

09 DMA配合ADC多通道

[TOG] 前言 前面介绍了ADC数模转换&#xff0c;得到了内部的温度值和外部电压值&#xff0c;我感觉这样太消耗CPU的资源了&#xff0c;所以我准备用DMA来帮我从AD的数据寄存器中拿出数据出来&#xff0c;就不用再去读取AD的数据寄存器了。 一、什么是DMA DMA叫做直接存储器…

从分散到集中:TSINGSEE青犀EasyCVR视频汇聚网关在视频整体监控解决方案中的整合作用

边缘计算视频汇聚网关是基于开放式、大融合、全兼容、标准化的设计架构理念&#xff0c;依据《安全防范视频监控联网系统信息传输、交换、控制技术要求》&#xff08;GB/T28181-2011&#xff09;标准开发&#xff0c;集流媒体转发、视频编码、视频管理、标准通信协议、网络穿透…

【MAUI】系统主题方案

文章目录 概述具体AppThemeBindingResourceDictionaryApplication.Current.Resources.MergedDictionariesDynamicResource 来源 概述 主要有两种&#xff1a;AppThemeBinding 和ResourceDictionaryApplication.Current.Resources.MergedDictionariesDynamicResource 具体 Ap…

视频美颜SDK的核心技术与直播美颜插件的开发详解

本篇文章&#xff0c;小编将深入探讨视频美颜SDK的核心技术以及如何开发高效的直播美颜插件。 一、视频美颜SDK的核心技术 视频美颜SDK的核心在于其实时图像处理能力&#xff0c;它通过一系列复杂的算法&#xff0c;实现对视频图像的增强和优化。以下是几项关键技术&#xff…

【产品推荐】高性能隔离接口芯片——CMT83085

产品概述 CMT83085是华普微精心打造的一款高可靠性隔离接口芯片&#xff0c;它集成了先进的数字隔离技术和RS-485通信接口&#xff0c;即基于数字隔离技术的高可靠性半双工 RS-485 收发器&#xff0c;专为需要高安全性和长距离数据传输的应用场景设计。 该芯片不仅具备出色的…

鸿蒙开发5.0【应用异常处理】运维

应用异常处理 介绍 本示例介绍了通过应用事件打点hiAppEvent获取上一次应用异常信息的方法&#xff0c;主要分为应用崩溃、应用卡死两种。 效果图预览 使用说明 点击构建应用崩溃事件&#xff0c;3s之后应用退出&#xff0c;然后打开应用进入应用异常页面&#xff0c;隔1mi…

Java学习笔记(二十):反射、动态代理、日志、类加载器、xml、单元测试Junit、注解

目录 一、反射 1.1 反射的概述&#xff1a; 1.2 学习反射到底学什么&#xff1f; 1.3 获取字节码文件对象的三种方式 1.4 字节码文件和字节码文件对象 1.5 获取构造方法 1.6 获取构造方法并创建对象 1.7 获取成员变量 1.8 获取成员变量并获取值和修改值 1.9 获取成员…

002集——C#基本语法——C#学习笔记

C# 是一种面向对象的编程语言。在面向对象的程序设计方法中&#xff0c;程序由各种相互交互的对象组成。相同种类的对象通常具有相同的类型&#xff0c;或者说&#xff0c;是在相同的 class 中。 例如&#xff0c;以 Rectangle&#xff08;矩形&#xff09;对象为例。它具有 le…

一文读懂如何选择视频孪生三维建模方式及建模精度等级

导言/INTRODUCTION 三维模型是视频孪生应用的基础&#xff0c;建模方式与模型精度将直接影响到最终孪生场景的呈现和应用效果。各种建模方式和模型精度在成本、场景还原真实度、实施周期方面都有自己的特点&#xff0c;因而有着各自的优劣势和适用场景&#xff0c;同一场景可能…

基于Hadoop的国内手机销售大数据分析与可视化研究【百万数据集】

文章目录 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主项目介绍 绪论研究背景研究目的研究意义 相关技术理论介绍Hadoop相关理论HIve数据仓库flume组件介绍sqoop组件介绍Pyecharts介绍 数据来源及处理数据介绍数据预处理 Hadoop集群搭建Hadoop全…