You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang绘制心电图显示异常:所得结果不符合预期

Golang绘制心电图显示异常排查

问题描述

用Golang绘制心电图时出现显示异常,无法定位根本原因。怀疑是缩放设置错误,但不排除其他诱因。

实现代码

import (
    "fmt"
    "github.com/fogleman/gg"
    "io/ioutil"
    "log"
    "strconv"
    "strings"
)

const (
    Width            = 800
    Height           = 600
    MajorGridSpaces  = 5
    MinorGridSpaces  = MajorGridSpaces * 5
    MinorGridSpacing = Width / float64(MinorGridSpaces)
    SmallSquareSize  = MinorGridSpacing / 5
)

func main() {
    encodedData, err := ioutil.ReadFile("/Users/piter/PycharmProjects/ecg/decoded_data.txt")
    if err != nil {
        log.Fatal(err)
    }
    dataStrings := strings.Split(string(encodedData), " ")

    var ecgData []float64

    for i := 0; i < len(dataStrings); i += 13 {
        value, err := strconv.ParseFloat(dataStrings[i], 64)
        if err != nil {
            log.Fatalf("Error: %v", err)
        }
        ecgData = append(ecgData, value)
    }

    dc := gg.NewContext(Width, Height)
    dc.SetRGB(1, 1, 1)
    dc.Clear()
    dc.SetRGBA(0.6, 0.6, 0.6, 0.8)

    for x := 0.0; x <= Width; x += MinorGridSpacing {
        dc.DrawLine(x, 0, x, Height)
    }

    for y := 0.0; y <= Height; y += MinorGridSpacing {
        dc.DrawLine(0, y, Width, y)
    }

    for x := 0.0; x < Width; x += MinorGridSpacing {
        for y := 0.0; y < Height; y += MinorGridSpacing {
            for i := 0; i < 5; i++ {
                for j := 0; j < 5; j++ {
                    dc.DrawRectangle(x+float64(i)*SmallSquareSize, y+float64(j)*SmallSquareSize, SmallSquareSize, SmallSquareSize)
                }
            }
        }
    }

    dc.SetLineWidth(0.2)
    dc.Stroke()

    dc.SetRGBA(0, 0, 0, 1)
    dc.SetLineWidth(0.5)

    xStep := Width / float64(len(ecgData)-1)
    for i := 0; i < len(ecgData)-1; i++ {
        x1 := float64(i) * xStep
        y1 := Height/2 - ecgData[i]*(Height/2)/50
        x2 := float64(i+1) * xStep
        y2 := Height/2 - ecgData[i+1]*(Height/2)/50

        dc.DrawLine(x1, y1, x2, y2)
    }
    dc.Stroke()

    if err := dc.SavePNG("ecg_with_grid.png"); err != nil {
        log.Fatal(err)
    }
}

示例数据

ecgData := []float64{
    0.04878048780487805, -0.06341463414634146, -0.014634146341463415,
    0.05609756097560976, -0.01707317073170732, -0.03902439024390244,
    -0.004878048780487805, -0.01951219512195122, -0.08292682926829269,
    -0.09268292682926829, -0.06829268292682927, -0.05365853658536585,
    -0.04878048780487805, -0.06341463414634146, -0.014634146341463415,
    0.05609756097560976, -0.01707317073170732, -0.03902439024390244,
    -0.004878048780487805, -0.024390243902439025, -0.08292682926829269,
    -0.09268292682926829, ....
}

预期效果

预期心电图效果

实际异常效果

实际异常心电图效果


内容的提问来源于stack exchange,提问作者Jenny F

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 14:23:22