首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Golang中绘制具有两个半径的圆

,可以使用图形库来实现。Golang中常用的图形库有github.com/fogleman/gggithub.com/llgcode/draw2d

  1. github.com/fogleman/gg是一个简单易用的2D绘图库,可以用于绘制各种图形,包括圆形。以下是使用该库绘制具有两个半径的圆的示例代码:
代码语言:go
复制
package main

import (
	"github.com/fogleman/gg"
	"math"
)

func main() {
	const (
		width  = 800
		height = 800
		radius1 = 200
		radius2 = 300
	)

	dc := gg.NewContext(width, height)
	dc.SetRGB(1, 1, 1) // 设置背景颜色为白色
	dc.Clear()

	dc.SetRGB(0, 0, 0) // 设置圆的颜色为黑色
	dc.DrawCircle(width/2, height/2, radius1)
	dc.Stroke()

	dc.SetRGB(1, 0, 0) // 设置圆的颜色为红色
	dc.DrawCircle(width/2, height/2, radius2)
	dc.Stroke()

	dc.SavePNG("circle.png") // 保存绘制结果为PNG图片
}

在上述代码中,我们使用gg.NewContext创建了一个800x800像素的绘图上下文,然后使用dc.SetRGB设置背景颜色为白色,接着使用dc.Clear清空绘图上下文。

接下来,我们使用dc.SetRGB设置圆的颜色,使用dc.DrawCircle绘制两个圆,分别具有半径为200和300,圆心位于绘图区域的中心点(width/2, height/2)

最后,使用dc.Stroke绘制圆的轮廓线,并使用dc.SavePNG保存绘制结果为PNG图片。

  1. github.com/llgcode/draw2d是一个功能强大的2D绘图库,支持更多的绘图操作。以下是使用该库绘制具有两个半径的圆的示例代码:
代码语言:go
复制
package main

import (
	"fmt"
	"github.com/llgcode/draw2d/draw2dimg"
	"image"
	"image/color"
	"math"
)

func main() {
	const (
		width  = 800
		height = 800
		radius1 = 200
		radius2 = 300
	)

	// 创建一个空白的绘图画布
	dest := image.NewRGBA(image.Rect(0, 0, width, height))

	// 创建一个绘图上下文
	gc := draw2dimg.NewGraphicContext(dest)

	// 设置背景颜色为白色
	gc.SetFillColor(color.White)
	gc.Clear()

	// 设置圆的颜色为黑色
	gc.SetStrokeColor(color.Black)
	gc.SetLineWidth(2)

	// 绘制半径为200的圆
	gc.BeginPath()
	gc.ArcTo(width/2, height/2, radius1, radius1, 0, 2*math.Pi)
	gc.Stroke()

	// 设置圆的颜色为红色
	gc.SetStrokeColor(color.Red)

	// 绘制半径为300的圆
	gc.BeginPath()
	gc.ArcTo(width/2, height/2, radius2, radius2, 0, 2*math.Pi)
	gc.Stroke()

	// 保存绘制结果为PNG图片
	draw2dimg.SaveToPngFile("circle.png", dest)
}

在上述代码中,我们首先使用image.NewRGBA创建了一个800x800像素的空白画布,然后使用draw2dimg.NewGraphicContext创建了一个绘图上下文。

接着,我们使用gc.SetFillColor设置背景颜色为白色,使用gc.Clear清空绘图上下文。

然后,我们使用gc.SetStrokeColor设置圆的颜色,使用gc.SetLineWidth设置线条宽度。

接下来,使用gc.BeginPath开始绘制路径,使用gc.ArcTo绘制两个圆,分别具有半径为200和300,圆心位于绘图区域的中心点(width/2, height/2)

最后,使用gc.Stroke绘制圆的轮廓线,并使用draw2dimg.SaveToPngFile保存绘制结果为PNG图片。

以上是在Golang中绘制具有两个半径的圆的示例代码,你可以根据需要选择适合的图形库来实现。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

教你Tableau绘制蝌蚪图等带有空心图表(多链接)

本文将通过分享多种方法,包括成功与失败尝试,来讲解如何在Tableau创建蝌蚪图等带有空心图表。...我之前遇到过这种情况并且多年来尝试过各种方法,所以我会分享自己一些尝试和简单解决方法,用于Tableau中使用空白绘制蝌蚪图等图表。...建立一个蝌蚪图是简单直接:它从哑铃图开始。但是一个单点只能显示当前时段而无法显示前一个时段信息。Tableau,哑铃图很容易构建。它需要两个轴,一个轴作为点,另一个轴作为线来连接点。...那么为什么不创建一个有白色圆心圆圈PNG文件里呢?这样做问题是,当Tableau对保存为具有透明背景PNG文件自定义图形上颜色编码时,它会改变白色中心颜色,最后会出现彩色圆点。...右键点击销售圈并选择“复制”,移动测量值到总和(销售圈)之上列。这一操作会使测量值替代总和(销售圈)。 你现在有四个测量值呈现在测量值卡片上,但我们只需要其中两个

8.4K50

FlashDirectX绘制

这里使用是之前我说过OLE控件Direct3D渲染方法, 自己不进行swf解析, 这不现实....创建一个ShockwaveFlashObjects::IShockwaveFlash对象 实现一个IOleClientSite来做为IShockwaveFlash容器 绘制 通过OleDraw来把...GDI像素数据绘制到DC上(IShockwaveFlash是一个IViewObject) 把DC像素数据拷贝到D3DTexture上....中间涉及像素格式内存操作, 需要明白图像数据内存格式. 半透明支持(可选): 如果不需要半透明支持的话, 其实可以直接OleDraw到TextureDC上, 不用再多一次拷贝....但是有时候不得不用(像UI), 可以这参考Transparent Flash Control in plain C++, 用黑色背景和白色背景绘制两次, 比较两次结果 Red通道计算出相应Alpha

1.8K30

任意半径局部直方图类算法PC快速实现框架。

图像处理,局部算法一般来说,很大程度上会获得比全局算法更为好效果,因为他考虑到了图像领域像素信息,而很多局部算法可以借助于直方图获得加速。...一些局部算法只有半径较大时才会获得很好效果,因此,必须找到一种合适加速计算局部直方图方式。      ...参考Median Filter in Constant Time.pdf一文附带C代码基础上,本文提出了基于SSE加速恒长任意半径局部直方图获取技术,可以大大加速算法计算时间,特别是大半径提速更为明显...之后,对于一行第一个像素点,累加半径辐射范围内列直方图,得到改点局部直方图,对于行其他像素,则类似于更新行直方图,先减去不在范围内那列列直方图,然后加上移入范围内列直方图。...经过测试,I5台式机,1024*768图像在直方图更新上所需要平均之间约为30ms,相比局部算法核心就算部分时间(比如上述求最大值),可能大部分耗时并不在这里。

1K80

知识分享之Golang——Golang管道(channel)使用

知识分享之Golang——Golang管道(channel)使用 背景 知识分享之Golang篇是我日常使用Golang时学习到各种各样知识记录,将其整理出来以文章形式分享给大家,来进行共同学习...开发环境 系统:windows10 语言:Golang golang版本:1.18 内容 本节我们分享Golang管道(channel)使用,使用管道时我们需要注意:先进先出原则。...以下是其相关代码和使用说明(代码注释) package main import "fmt" func main() { // 声明一个管道 var ch chan int...{ // c是接受对象,ok是本次读取装填,当管道没有值了或管道关闭了,这时就会返回false c, ok := <-ch if ok {...协程,使用起来我们就可以实现各种各样高并发、队列机制等功能了。

78920

CAD常用基本操作

))有缘学习更多+谓ygd3076考证资料或关注桃报:奉献教育(店铺) 21 绘图中平行四边形法则(利用绘制四边形绘制某些图形) A两条直线卡一条直线,绘制一个边直线后,通过平移获取另一边直线 B 绘制相应长度弦...上下方向键命令 (圆心和半径自动记录功能)有缘学习更多+谓ygd3076考证资料或关注桃报:奉献教育(店铺) b 特殊角度切线画法可采用先绘水平切线再绕圆心同时旋转和切线方法 c 绘制与两相切且圆心一直线上时...,可以选择相切相切之后直线上选择垂足命令绘制(经验,无理论证明) d 如何绘制具有一定角度直线:先在圆心绘制相同角度直线,再偏移半径值 3....,故两之间倒圆角结果为使用圆角弧与平滑地相连 I 三维倒角命令,链式倒圆角,链指光滑连续相切边 J 对两个三维几何体进行倒圆角操作时,应先进行并集操作,否则圆角会出现两几何体接触部分面积减少情况...mline(ML) A 用于绘制多条平行线 B 对正(J)a 上:光标下方绘制多线,指定点处将会出现具有最大正偏移值直线 b 无:将光标作为原点绘制多线 c 下:光标上方绘制多线,指定点处将出现具有最大负偏移值直线

5.4K50

HTML5-Canvas之矩阵和多边形绘制(2)

矩形绘制一共有两个口令,分别是 ctx.fillRect(x, y, width, height) 和 ctx.strokeRect(x, y, width, height) ,参数 x 和 y...PS/AI径向渐变只需要这两个点)。...但canvas在这里加入半径”参数还是有一定作用,可以创造出比PS径向渐变稍微复杂一些效果。...⑴ 我们先来一个最简单最好理解例子: 我们设置起始和结束中点相同,且起始半径为0,那么它渐变线就是从两中点开始到结束边缘结束。...效果如下: ⑵ 我们基础上将起始半径设为20,代码和效果图如下: ⑶ 我们基础上挪动起始中点,不要让它跟结束中点重叠,代码和效果图如下: 注意我们定义RadialGradient

1.3K20

【CV 向】如何打造一个“数串串神器“

斑点通常是图像亮点或暗点,其图像具有一定特征和属性,例如颜色、大小、形状等。Blob Detection目标是找到这些斑点并提取相关信息。...)是一种用于图像检测经典算法。...参数空间:霍夫变换,使用三个参数来表示一个:圆心x坐标、圆心y坐标以及半径r。通过设定合适参数范围,创建一个二维参数空间来表示所有可能。...检测:累加器数组中找到具有高累加值位置,这些位置对应于可能圆心和半径组合。这些位置表示了图像存在。 阈值和非最大抑制:根据设定阈值,筛选出累加值高于阈值。...对于相邻,进行非最大抑制,保留具有最高累加值,抑制其他绘制:根据筛选出圆心和半径原始图像上绘制检测到

28120

Android自定义View之仿QQ未读消息拖拽效果

效果图具有以下特性: 小圆点拖拽是有范围 拖拽范围进行拖拽后释放小圆点会进行回弹后回到初始位置 拖拽时候,中心会慢慢变小,拖拽大小不变,中间连接部分越来越长并且越来细,直至消失 如果超出定义拖拽范围后进行释放会有爆炸效果并且消失...3 分析 3.1 组成 先分析这个视图组成: 中心小圆:一个固定 跟着手指移动小圆:一个拖拽 两个连接部分 两条直线(两个直径),用来连接两条贝塞尔曲线,形成封闭图形...:P1,P2,P3,P4,M,其中P1,P2,P3,P4是切点,现在只知道两个中心圆点O1和O2,那么怎么根据这两个点来求其余四个切点呢?...} 18 return r; 19 20 21 } 最后onDraw方法里,添加计算变化中心半径即可: 1 //绘制方法 2 protected void onDraw...距离限制 下面增加拖拽距离限制,当拖拽距离大于给定距离时,中心就会消失,逻辑很简单,也就是onTouchEvent里ACTION_MOVE,计算两个拖拽距离,如果超出给定拖拽距离,就不绘制贝塞尔曲线和中心固定

1.8K20

Google Earth Engine ——边界线识别!

Finding Circles, Revisited Earth Engine by Example 地球引擎代码编辑器示例,有一个通过内核卷积进行查找示例。...本文将演示另一种检测方法,它具有更大灵活性,称为霍夫变换(CHT)。 Circle Hough 变换应用于科罗拉多州南部中心枢轴灌溉农场边缘检测图像示例。彩色圆点代表检测到圆心。...CHT 通常配方是: 使用高斯卷积平滑输入 使用 Canny 边缘检测器执行边缘检测 迭代图像像素,为每个输入像素绘制一个给定半径到一个累加器图像。...找出累加器最高值;这些将对应于输入任何中心。 要了解 CHT 工作原理,请考虑下图,其中输入(左) 4 个像素被描绘为半径为0.6*r(中心)和半径为1.0*r(右)。...CHT 配方中两个步骤 Earth Engine 很简单,但是在那里迭代图像每个像素是不切实际,因此我们无法以传统方式跟踪和累积圆圈。

10410

蛛网图+绘制+动画实践

Android时候自定义过蛛网图,花了半天时间。复刻到Flutter只用了不到20分钟 不得不说FlutterCanvas对安卓玩家还是非常友好,越来越觉得Flutter非常有趣。...本文你将学到: 1.三角函数使用 2.Flutter如何用绘制文字 3.动画在绘图中实际运用 4.Canvas绘图相关相关方法 5.Flutter中一个组件封装 ? ?...为了减少变量值,让尺寸具有很好联动性(等比扩缩),小黑条长宽将取决于最大半径mRadius 则:小黑条长:mRadius*0.08 小黑条宽:mRadius*0.05 所以r2=mRadius-mRadius...();//释放图层 } canvas.restore();//释放图层 } ---- 1.3.绘制内圈 同样尺寸和最外看齐,这里绘制有一丢丢复杂,你需要了解canvas和path使用...canvas.restore(); } canvas.restore(); } ---- 1.3.绘制文字 Flutter绘制文字可有点略坑,我这里简单封了一个drawText

1.1K40

蛛网图+绘制+动画实践

Android时候自定义过蛛网图,花了半天时间。复刻到Flutter只用了不到20分钟 不得不说FlutterCanvas对安卓玩家还是非常友好,越来越觉得Flutter非常有趣。...本文你将学到: 1.三角函数使用 2.Flutter如何用绘制文字 3.动画在绘图中实际运用 4.Canvas绘图相关相关方法 5.Flutter中一个组件封装 ? ?...为了减少变量值,让尺寸具有很好联动性(等比扩缩),小黑条长宽将取决于最大半径mRadius 则:小黑条长:mRadius*0.08 小黑条宽:mRadius*0.05 所以r2=mRadius-mRadius...();//释放图层 } canvas.restore();//释放图层 } ---- 1.3.绘制内圈 同样尺寸和最外看齐,这里绘制有一丢丢复杂,你需要了解canvas和path使用...canvas.restore(); } canvas.restore(); } ---- 1.3.绘制文字 Flutter绘制文字可有点略坑,我这里简单封了一个drawText

1.4K10

Json序列化golang应用

关于我 作者博客|文章首发 golang对json序列化和反序列化操作实在是难受,所以说用习惯了高级语言特性,再转到这些偏原生写法上就会很难受。 不多BB,开始记录。...序列化库选择 当写个小demo或者做个小工具,没有大规模使用场景,那使用哪个库都是一样,因为性能体现并不会很明显。...但是如果是实际项目中使用,且伴随着高并发,大容量等场景,我还是推荐使用json-iterator。...go自带json库 "encoding/json" 官当自带 json-iterator 号称最快go json解析器。跟官方写法兼容,我目前基本都使用这个。...GitHub上Star最高工程师技能图谱 中国程序员最容易发错单词 END 欢迎关注公众号 程序员工具集 致力于分享优秀开源项目、学习资源 、常用工具 回复关键词“关注礼包”,送你一份最全程序员技能图谱

2.1K30

【CV 向】如何打造一个“数串串神器“

斑点通常是图像亮点或暗点,其图像具有一定特征和属性,例如颜色、大小、形状等。Blob Detection目标是找到这些斑点并提取相关信息。...)是一种用于图像检测经典算法。...参数空间:霍夫变换,使用三个参数来表示一个:圆心x坐标、圆心y坐标以及半径r。通过设定合适参数范围,创建一个二维参数空间来表示所有可能。...检测:累加器数组中找到具有高累加值位置,这些位置对应于可能圆心和半径组合。这些位置表示了图像存在。阈值和非最大抑制:根据设定阈值,筛选出累加值高于阈值。...对于相邻,进行非最大抑制,保留具有最高累加值,抑制其他绘制:根据筛选出圆心和半径原始图像上绘制检测到

41610

自定义view——圆形进度条实现

实现思路 这里思路很简单,画两个同心,一个半径稍大,然后两个半径差距范围内画弧度变化圆弧,来代表不同状态进度。这个demo里我们可以配置圆弧显示不同颜色。...,就需要我们把这些属性抽象到代码,自定义属性声明是res/values 下attrs.xml,如果res/values路径下没有attrs文件的话我们自己新建一个就好。...绘制 当我们获取完自定义属性之后,接下来就要绘制了,我们都知道,绘制onDraw方法执行。下面我们就按本文最开始 "实现思路"来写绘制进度条逻辑代码。...可以看到,第一行代码绘制大圆,它比里边半径大了一个进度条画笔宽度。...,所以这个圆弧刚好填充两个之间,看效果图即可。

1K10

解决canvas高清屏绘制模糊问题

一、问题分析 使用 canvas 绘制图片或者是文字 Retina 屏中会非常模糊。如图: [img] 因为 canvas 不是矢量图,而是像图片一样是位图模式。...也就是说二倍屏,浏览器就会以 2 个像素点宽度来渲染一个像素,该 canvas Retina 屏幕下相当于占据了2倍空间,相当于图片被放大了一倍,因此绘制出来图片文字等会变模糊。...类似的, canvas context 也存在一个 backingStorePixelRatio 属性,该属性值决定了浏览器渲染 canvas 之前会用几个像素来来存储画布信息。...", 50, 50); 这样就可以解决 canvas 高清屏绘制模糊问题。...完整demo:https://www.html.cn/demo/canvas_retina/index.html 参考文章:《解决 canvas 高清屏绘制模糊问题》

6.1K10

用程序绘制一个脸表情

前言 本系列课程是针对无基础,争取用简单明了语言来讲解,学习前需要具备基本电脑操作能力,准备一个已安装python环境电脑。如果觉得好可以分享转发,有问题地方也欢迎指出,在此先行谢过。...今天来学习如何绘制一个笑脸。 ? 绘制 绘制非常简单,只需要调用circle(),配合填充两个方法就可以了. ?...调整到画布中间 海龟画笔默认 起点位置中心,绘制时候就会偏上半部分,这里将起点往下移动了半径长度100,使得整个居中显示了,移动前需要抬笔,避免出现移动痕迹。 ?...重构优化 上面是完成了也给绘制,但是后面还有眼睛和嘴巴,如果都像上面那样写,最后重复工作就会有很多了,这里将上面的代码重新封装成函数,变化地方统一用变量代替了,这样就具有通用性了,为后面绘制眼睛和嘴巴做好准备...绘制眼睛和嘴巴 有了上面的方法后,接下来只要计算出眼睛坐标和嘴巴坐标就很好绘制了,计算过程这里就不讲了,需要自己动手绘制或者直接脑补,直接调用前面的方法就可以了,眼睛左右除了x参数相反外其它都一样,

42510
领券