c#实现三角形面积计算器

前言

上星期人机交互课老师布置了一个作业,让我们实现一个三角形面积计算器,有界面的那种,编程语言不限,并且透露说用c#实现比较方便。由于之前也没有学过c#,抱着试一试的态度开始了c#的“Hello World”之旅。

WinForm or WPF?

装好了VS2015打算写c#,建工程的时候却不知道建c#的什么工程好,上网查了一下,基本上有两个选择,WinForm和WPF,稍微了解了一下两者的区别,WPF晚于WinForm出现,比WinForm对线程的处理更加成熟,同时绘图能力也大有提升。答案似乎显而易见了,我最初是用WPF的,不过到了最后一步画三角形的时候,由于没有找到对应的控件,迫使我转向了WinForm,也许有别的解决办法,暂时不去研究了。

界面设计&添加事件

看着微软的c#教程,就开始编写代码了。果然简单,控件都是直接从工具箱拽入页面的,然后在属性窗口可以设置各种属性,相比于上学期学的java GUI设计,实在是太方便,大大提高了开发效率。

拖拽几个简单的控件,设计好布局,下面要做的就是为控件添加事件。用于输入的三个TextBox我都添加了Textchanged事件,用于判断用户当前输入是否合法等,Button控件添加了Click事件,点击之后可以计算三角形的面积,同时在控件PictureBox中绘出大致的三角形。

关于绘制三角形这一块,倒是浪费了我不少时间。一开始是System.Drawing这个命名空间找不到,搞了半天发现要自己添加引用,还有就是从WPF转向WinForm的原因,WPF下没找到合适的存放绘制好的三角形的控件,但发现了WinForm下的Picturebox控件可以解决这个问题,遂转向了WinForm。另外则是绘制三角形的函数通常需要知道点的坐标,而我们给出的是边长,这里我采用了固定最长边在某一水平线的方法,计算出三个点的坐标,然后绘图。

具体实现效果如下:
输入边长不合法的情况
输入边长不能构成三角形的情况
计算出面积的情况

部分事件代码:

 

 代码如下 复制代码

using System;
using System.Drawing;
using System.Windows.Forms;

namespace triangle_area
{
    public partial class title : Form
    {
        public title()
        {
            InitializeComponent();
        }

        private void button_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(len_a.Text.Trim()) && !string.IsNullOrEmpty(len_b.Text.Trim()) && !string.IsNullOrEmpty(len_c.Text.Trim()))
            {
                double a, b, c;
                a = double.Parse(len_a.Text);
                b = double.Parse(len_b.Text);
                c = double.Parse(len_c.Text);

                if (a + b > c && a + c > b && b + c > a)
                {
                    pictureBox1.Refresh();
                    double p = (a + b + c) / 2;
                    double s = Math.Sqrt(p * (p - a) * (p - b) * (p - c));
                    result.Text = "三角形面积为:" + s.ToString("f3");

                    double max_len = Math.Max(Math.Max(a, b), c);
                    double min_len = Math.Min(Math.Min(a, b), c);
                    double mid_len = a + b + c - max_len - min_len;
                    double cos_theda = (Math.Pow(max_len, 2) + Math.Pow(min_len, 2) - Math.Pow(mid_len, 2))/(2*max_len*min_len);
                    double sin_theda = Math.Sqrt(1 - Math.Pow(cos_theda, 2));
                    double h = 2 * s / max_len;
                    double pos = min_len * cos_theda;

                    double factor = 300/max_len;
                    double left_margin = 200 - max_len / 2 * factor;
                    double right_margin = 200 + max_len / 2 * factor;

                    Graphics g = pictureBox1.CreateGraphics();
                    SolidBrush blueBrush = new SolidBrush(Color.Blue);

                    Point point1 = new Point((int)left_margin, 270);
                    Point point2 = new Point((int)(right_margin), 270);
                    Point point3 = new Point((int)(left_margin + pos*factor), (int)(270 - h * factor));
                    Point[] curvePoints = { point1, point2, point3 };

                    g.FillPolygon(blueBrush, curvePoints);

                }
                else
                {
                    result.Text = "输入的边长不合法!";
                }
            }
            else
            {
                result.Text = "请输入三角形三边长!";
            }
        }

        private void len_a_TextChanged(object sender, EventArgs e)
        {
            result.Text = "";
            System.Text.RegularExpressions.Regex rex = new System.Text.RegularExpressions.Regex(@"^[+]?\d*[.]?\d+$");
            if (!rex.IsMatch(len_a.Text))
            {
                result.Text = "请输入数字!";
            }
            else if (!string.IsNullOrEmpty(len_a.Text.Trim()) && !string.IsNullOrEmpty(len_b.Text.Trim()) && !string.IsNullOrEmpty(len_c.Text.Trim()))
            {
                double a, b, c;
                a = double.Parse(len_a.Text);
                b = double.Parse(len_b.Text);
                c = double.Parse(len_c.Text);

                if (a + b <= c || a + c <= b || b + c <= a)
                {
                    result.Text = "输入的边长不合法!";
                }
            }
        }

        private void len_b_TextChanged(object sender, EventArgs e)
        {
            result.Text = "";
            System.Text.RegularExpressions.Regex rex = new System.Text.RegularExpressions.Regex(@"^[+]?\d*[.]?\d+$");
            if (!rex.IsMatch(len_b.Text))
            {
                result.Text = "请输入数字!";
            }
            else if (!string.IsNullOrEmpty(len_a.Text.Trim()) && !string.IsNullOrEmpty(len_b.Text.Trim()) && !string.IsNullOrEmpty(len_c.Text.Trim()))
            {
                double a, b, c;
                a = double.Parse(len_a.Text);
                b = double.Parse(len_b.Text);
                c = double.Parse(len_c.Text);

                if (a + b <= c || a + c <= b || b + c <= a)
                {
                    result.Text = "输入的边长不合法!";
                }
            }
        }

        private void len_c_TextChanged(object sender, EventArgs e)
        {
            result.Text = "";
            System.Text.RegularExpressions.Regex rex = new System.Text.RegularExpressions.Regex(@"^[+]?\d*[.]?\d+$");
            if (!rex.IsMatch(len_c.Text))
            {
                result.Text = "请输入数字!";
            }
            else if (!string.IsNullOrEmpty(len_a.Text.Trim()) && !string.IsNullOrEmpty(len_b.Text.Trim()) && !string.IsNullOrEmpty(len_c.Text.Trim()))
            {
                double a, b, c;
                a = double.Parse(len_a.Text);
                b = double.Parse(len_b.Text);
                c = double.Parse(len_c.Text);

                if (a + b <= c || a + c <= b || b + c <= a)
                {
                    result.Text = "输入的边长不合法!";
                }
            }
        }
    }
}

最后还是要吐槽一下vs里面的c#代码规范,大括号换行什么的看得好不习惯呢

时间: 2025-01-21 10:53:56

c#实现三角形面积计算器的相关文章

java三角形图形计算器怎么判断边?求教大神

问题描述 java三角形图形计算器怎么判断边?求教大神 package edu.jmi.shape; import java.util.Scanner; public class SanJiaoXing { float length; float high; /** * @param args */ float zhouChang(){ float zhou = 3*length; return zhou; } float mianJi(){ float mian = (length*high)

C语言OJ项目参考(2681)求三角形面积

(2681)求三角形面积 Description 输入三条边的长度,如果这三条边能构成三角形,则需要计算三角形面积,如果不能构成三角形则输出提示信息 "error input".输出的面积按两位小数方式输出 Input 三条边的长度 Output 如果这三条边能构成三角形,则输出该三角形面积,如果这三条边不能构成三角形,则输出提示信息"error input" Sample Input 3.3 4.4 5.5 Sample Output area=7.26 [参考解

flash 面积计算器

第1帧代码: var R:Number = 100;//半径 var cx:Number = Stage.width/2;  //舞台中心x坐标 var cy:Number = Stage.height/2;   //舞台中心y坐标 onEnterFrame = function () { if (cx-R<_root._xmouse&&_root._xmouse<cx+R&&cy-R<_ymouse&&_ymouse<cy+R) {

c语言计算三角形面积代码_C 语言

复制代码 代码如下: //面积公式s = (a+b+c) / 2   area = sqrt(s * (s - a) * (s - b) * (s - c));//小作业 求三角形的面积 int check(double a);int check2(double a, double b, double c); #include <stdio.h>#include <math.h>int main(void){    double area = 0;    double s;   

《C语言程序设计》一1.4 案例学习——计算三角形的面积

1.4 案例学习--计算三角形的面积 本节应用结构化程序设计方法根据如下需求进行分析和设计: 根据公式area=计算三角形的面积,其中a.b.c为三角形的三边,s=(a+b+c)/2为三角形半周长.编写程序,用以上信息计算边长为3.4.5的三角形面积. 1.问题分析 这一步主要是确认我们对需求有一个完整的理解. 1)确定预期的输出.为了确定预期的输出,应该首先在需求中查找计算.打印等关键词,在上面的需求中,关键的一句话为"计算边长为3.4.5的三角形面积",这明确了输出项为三角形的面积

《C语言程序设计》一 2.1 案例引入——计算三角形的面积

2.1 案例引入--计算三角形的面积 程序prg1-3.c只能计算边长为3.4.5的三角形的面积,不具有通用性.修改该程序,使其可以计算任意三角形的面积. [例2-1] 输入三角形三边,计算三角形的面积. /程序名:prg2-1.c/ /功能:输入三角形的三边,计算三角形的面积/ #include<stdio.h> #include<math.h> int main() { float a,b,c,s,area; scanf("%f,%f,%f",&a,

JAVA求两直线交点和三角形内外心的方法_java

一.求两直线交点 复制代码 代码如下: class Point {    double x;    double y;     public Point() {        this.x = 0;        this.y = 0;    }}class Line {    Point a;    Point b;     public Line() {        this.a = new Point();        this.b = new Point();    }    //求

POJ 2826 两线段关系求面积

题意:两个木板接雨,问你能解多少雨,也就是面积. 这题考虑几种情况:1,有线段平行x轴,接不到:2,两线段没交点,接不到:3,取两线段高的端点如果比两线段交点低也接不到:4,最不容易想到的,两木板在同侧并且上面的木板盖住了下面的木板也接不到.这四条单独判断然后求三角形面积就可以了. #include <iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cm

.Net判断点在三角形内部的问题

class CalcArea { //点 public class Point { private double x; private double y; public Point(double a, double b) { x = a; y = b; } public double getX() { return x; } public double getY() { return y; } public void setX(double a) { x = a; } public void s