Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- GitHub
- gnuplot
- react
- Godot
- ruby2d
- Vane
- Java
- plugin
- maven
- IntelliJ
- RaspberryPi
- C
- Android
- boj
- CPP
- Spring
- Baekjoon
- jetbrains
- error
- Shell
- gradle
- Python
- rubymine
- 개발노트
- OTLanguage
- JS
- 루비
- ruby
- OAuth
- kotlin
Archives
- Today
- Total
PersesTitan(페르) 기술블로그
[Ruby] 루비로 sin 그래프 구현하기 본문
관련된 글
[Ruby] 루비에서 그래프 구현하기 (gnuplot 설치)
[Ruby] 루비에서 그래프 구현하기 (gnuplot 설치)
먼저 homebrew가 설치가 되어 있어야합니다. 그리고 아래 커맨드를 터미널에 입력해서 gnuplot를 설치해줍니다. Homebrew 설치하기 Homebrew란? Homebrew는 ruby기반으로 구현된 맥 운영체제용 패키지 관리
persestitan.tistory.com
풀이
gnuplot
가 설치가 되었다면 간단하게 sin
그래프를 구현해보았습니다.
x변수에 [-5.0, -4.9, -4.8, ... 4.8, 4.9, 5.0]리스트를 생성하고 y변수에는 x 리스트에 값들의 sin값을 구한 값의 리스트를 넣어 주어서 그래프를 그려보았습니다. 정확한 값을 위해 0.1씩 증가할때 round로 소수점 1자리까지 나오게 하였는데요.
특정 구간에서 -3.5999999999999996
와 다들 이시는 컴퓨터 저장 방식에 따른 부동소수점
의 문제가 발생하기 때문에 정확한 값을 저장하기 위해서 반올림을 하였습니다.
round 미사용
x = (-5..5).step(0.1).collect { |v| v.to_f }
puts x.join(" ")
출력
-5.0 -4.9 -4.8 -4.7 -4.6 -4.5 -4.4 -4.3 -4.2 -4.1 -4.0 -3.9 -3.8 -3.7 -3.5999999999999996 -3.5 -3.4 -3.3 -3.2 -3.0999999999999996 -3.0 -2.9 -2.8 -2.6999999999999997 -2.5999999999999996 -2.5 -2.4 -2.3 -2.1999999999999997 -2.0999999999999996 -2.0 -1.9 -1.7999999999999998 -1.6999999999999997 -1.5999999999999996 -1.5 -1.4 -1.2999999999999998 -1.1999999999999997 -1.0999999999999996 -1.0 -0.8999999999999995 -0.7999999999999998 -0.7000000000000002 -0.5999999999999996 -0.5 -0.39999999999999947 -0.2999999999999998 -0.1999999999999993 -0.09999999999999964 0.0 0.10000000000000053 0.20000000000000018 0.3000000000000007 0.40000000000000036 0.5 0.6000000000000005 0.7000000000000002 0.8000000000000007 0.9000000000000004 1.0 1.1000000000000005 1.2000000000000002 1.3000000000000007 1.4000000000000004 1.5 1.6000000000000005 1.7000000000000002 1.8000000000000007 1.9000000000000004 2.0 2.1000000000000005 2.2 2.3000000000000007 2.4000000000000004 2.5 2.6000000000000005 2.7 2.8000000000000007 2.9000000000000004 3.0 3.0999999999999996 3.200000000000001 3.3000000000000007 3.4000000000000004 3.5 3.5999999999999996 3.700000000000001 3.8000000000000007 3.9000000000000004 4.0 4.1 4.200000000000001 4.300000000000001 4.4 4.5 4.600000000000001 4.700000000000001 4.800000000000001 4.9 5.0
round 사용
x = (-5..5).step(0.1).collect { |v| v.to_f.round(1) }
puts x.join(" ")
출력
-5.0 -4.9 -4.8 -4.7 -4.6 -4.5 -4.4 -4.3 -4.2 -4.1 -4.0 -3.9 -3.8 -3.7 -3.6 -3.5 -3.4 -3.3 -3.2 -3.1 -3.0 -2.9 -2.8 -2.7 -2.6 -2.5 -2.4 -2.3 -2.2 -2.1 -2.0 -1.9 -1.8 -1.7 -1.6 -1.5 -1.4 -1.3 -1.2 -1.1 -1.0 -0.9 -0.8 -0.7 -0.6 -0.5 -0.4 -0.3 -0.2 -0.1 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 4.0 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 5.0
코드
require 'gnuplot'
Gnuplot.open do |g|
Gnuplot::Plot.new(g) do |plot|
x = (-5..5).step(0.1).collect { |v| v.to_f.round 1 }
y = x.collect { |v| Math.sin v }
plot.data << Gnuplot::DataSet.new([x, y]) do |d|
d.with = "lines"
d.linewidth = 2
end
end
end
출력
'Language > Ruby' 카테고리의 다른 글
[Ruby] 루비로 tan 그래프 구현하기 (0) | 2023.04.12 |
---|---|
[Ruby] 루비로 cos 그래프 구현하기 (0) | 2023.04.12 |
[Ruby] 루비에서 그래프 구현하기 (gnuplot 설치) (0) | 2023.04.12 |
[Ruby] 루비로 게임 제작해보기 7: 도착 로직 구현 (0) | 2023.01.06 |
[Ruby] 루비로 게임 제작해보기 6-1: 물체 통과 막기 (0) | 2023.01.05 |