判断三角形是否为钝角三角形

package main

import (
	"fmt"
	"math"
)

type point struct {
	X float64
	Y float64
}

// s = sqrt(p*(p-a)*(p-b)*(p-c))  (海伦公式),其中 p = (a+b+c)/2

//距离
func distance(a, b point) float64 {
	return math.Sqrt((a.X-b.X)*(a.X-b.X) + (a.Y-b.Y)*(a.Y-b.Y))
}

//面积
func area(a, b, c point) float64 {
	ab := distance(a, b)
	ac := distance(a, c)
	bc := distance(c, b)
	p := (ab + ac + bc) / 2
	return math.Sqrt(p * (p - ab) * (p - ac) * (p - bc))
}

//重心
func point_middle(a, b, c point) point {
	return point{X: (a.X + b.X + c.X) / 3, Y: (a.Y + b.Y + c.Y) / 3}
}

//判断是否为钝角三角形
//钝角三角形特点是重心坐标在三角形外 与其它任何顶点组成的图形的面积>三角形面积

func is_obtuse(a, b, c point) bool {

	area1 := area(a, b, c)

	mPoint := point_middle(a, b, c)

	s1 := area(mPoint, a, b)
	s2 := area(mPoint, a, c)
	s3 := area(mPoint, b, c)

	if (s1 + s2 + s3) > area1 {
		return true
	} else {
		return false
	}
}

func main() {
	a := point{0, 0}
	b := point{-1, 1}
	c := point{3, 0} //明显的钝角三角形坐标

	fmt.Printf("is_obtuse %v \n", is_obtuse(a, b, c))

}


转载于:https://my.oschina.net/yang1992/blog/595457

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值