{"id":880,"date":"2020-12-03T15:58:58","date_gmt":"2020-12-03T20:58:58","guid":{"rendered":"http:\/\/www.moroha.net\/blog\/?p=880"},"modified":"2021-04-02T10:06:27","modified_gmt":"2021-04-02T15:06:27","slug":"how-high-can-a-bullet-go","status":"publish","type":"post","link":"https:\/\/www.moroha.net\/blog\/archives\/880","title":{"rendered":"How High Can a Bullet Go?"},"content":{"rendered":"\n<p>There was a question posted on the physics subreddit <a href=\"https:\/\/www.reddit.com\/r\/Physics\/comments\/k5kh2d\/if_you_shot_a_bullet_straight_up_how_high_would\/\">asking<\/a> how high in the air a bullet would go if you shot it straight up.  It was later removed by the moderators (who knows why?), but I thought it was a good question that would make a good example problem. Normally I would use MATLAB to solve something like this, but I thought it would be a good opportunity for me to start using python more to solve technical problems like this.<\/p>\n\n\n\n<p>In terms of an actual physics problem, here&#8217;s how I would state it: a bullet of known dimensions and mass is fired straight upward at a known velocity.  What is it&#8217;s maximum height, and how long does it take it to get there?<\/p>\n\n\n\n<p>So how do we model this?  Once the bullet leaves the muzzle of the gun, there are only two forces acting on it: gravity, and air resistance.  Newton&#8217;s 2nd law tells us that the acceleration of an object is proportional to the force acting upon it, or in equation form \\(F=ma\\). The acceleration is defined as the derivative of the velocity with respect to time, or \\(a=\\frac{dv}{dt}\\). So we can write this as a differential equation for the velocity of the bullet as a function of time:<\/p>\n\n\n\n<p class=\"has-text-align-left\">$$m\\frac{dv}{dt}=-F_g &#8211; F_d$$<\/p>\n\n\n\n<p>Where \\(m\\) is the mass of the bullet, \\(v\\) is the velocity, \\(t\\) is time, \\(F_g\\) is the force of gravity, and \\(F_d\\) is the drag force due to wind resistance.  This also requires an initial condition for \\(v\\) at \\(t=0\\), which is simple the muzzle velocity of the bullet.<\/p>\n\n\n\n<p>The gravitational force \\(F_g\\) is pretty straightforward: \\(F_g=mg\\), where \\(g\\) is the gravitational acceleration of 9.8 m\/s<sup>2<\/sup>. The drag force is a bit more complicated though. It&#8217;s given as<\/p>\n\n\n\n<p>$$F_d=\\frac{1}{2}\\rho v^2 A C_d$$<\/p>\n\n\n\n<p>Where \\(\\rho\\) is the density of the fluid it&#8217;s traveling through (air), \\(v\\) is of course the velocity, \\(A\\) is the cross-sectional area of the object (in this case the circular cross-sectional area of the bullet as you look at it head-on), and \\(C_d\\) is the drag coefficient of the object.<\/p>\n\n\n\n<p>Determining the drag coefficient is what makes this problem a bit complicated.  It&#8217;s defined as follows:<\/p>\n\n\n\n<p>$$C_d = \\frac{2 F_d}{\\rho v^2 A}$$<\/p>\n\n\n\n<p>So you can see it&#8217;s just a rearranged version of the drag force itself.  This appears to be self-referential, but it&#8217;s not: the drag coefficient is measured experimentally or by performing fluid dynamics simulations, and it then becomes a function of velocity that we can use for solving other problems.<\/p>\n\n\n\n<p>So we just need to find some results that someone else has already measured experimentally. An internet search found <a href=\"https:\/\/www.lapua.com\/wp-content\/uploads\/2019\/03\/QTU-Lapua-Edition.pdf\">this<\/a> info sheet, which shows a typical bullet drag coefficient as a function of the Mach number.  The Mach number is just the ratio of the velocity of an object to the speed of sound, so if we know the speed of sound in air (we can look this up) then we can use that data to calculate our drag coefficient as a function of velocity.<\/p>\n\n\n\n<p>However this is just a data table on a website.  How do we get this into either a functional form or a lookup table that we can use? I was able to find the plot by itself as a separate image:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i.imgur.com\/hv1lix9.gif\" alt=\"\" width=\"326\" height=\"405\"\/><figcaption>Drag coefficient as a function of Mach number<\/figcaption><\/figure><\/div>\n\n\n\n<p>Then I used the very handy website <a href=\"https:\/\/apps.automeris.io\/wpd\/\">WebPlotDigitizer<\/a> to convert it to a csv file.  With that in hand we now have everything we need to calculate the trajectory of the bullet.  You can download a copy of the csv file for yourself it you want to look at it or use it with the python code I have at the end of this post.<\/p>\n\n\n\n<div class=\"wp-block-file\"><a href=\"https:\/\/www.moroha.net\/blog\/wp-content\/uploads\/2020\/12\/drag_coefficient.csv\">drag_coefficient<\/a><a href=\"https:\/\/www.moroha.net\/blog\/wp-content\/uploads\/2020\/12\/drag_coefficient.csv\" class=\"wp-block-file__button\" download>Download<\/a><\/div>\n\n\n\n<p>For the actual gun and bullet, I decided I might as well go big: I looked up the parameters for a .50 caliber rifle and ammunition:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Parameter<\/strong><\/td><td><strong>Value<\/strong><\/td><\/tr><tr><td>muzzle velocity<\/td><td>884 m\/s<\/td><\/tr><tr><td>bullet diameter<\/td><td>13 mm<\/td><\/tr><tr><td>bullet mass<\/td><td>43 g<\/td><\/tr><\/tbody><\/table><figcaption>.50 caliber bullet and gun parameters<\/figcaption><\/figure>\n\n\n\n<p>From the bullet diameter we can calculate the cross-sectional area of the bullet \\(A\\) to be 1.327 cm<sup>2<\/sup>.  <\/p>\n\n\n\n<p>We&#8217;ll need a few other constants as well:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Constant<\/strong><\/td><td><strong>Value<\/strong><\/td><\/tr><tr><td>gravitational acceleration<\/td><td>9.80665 m\/s<sup>2<\/sup> <\/td><\/tr><tr><td>density of air<\/td><td>1.225 kg\/m<sup>3<\/sup><\/td><\/tr><\/tbody><\/table><figcaption>Constants used in calculations<\/figcaption><\/figure>\n\n\n\n<p>So that should be everything we need to solve for the velocity.  We also want to solve for the height of the bullet at the same time, fortunately the equation for this is very simple. Since velocity is defined at the derivative of position as a function of time, our second equation then is simply<\/p>\n\n\n\n<p>$$\\frac{dx}{dt}=v$$<\/p>\n\n\n\n<p>Where \\(x\\) is the position\/height of the bullet as a function of time.  The initial condition is very simple as well, simply \\(x(0)=0\\).<\/p>\n\n\n\n<p>With this we should have all the information we need to solve for the bullet trajectory.  To solve them numerically we&#8217;ll need some code that can solve an initial-value problem (ivp). Algorithms to do this are implemented in just about every mathematics software that&#8217;s out there: Matlab, Mathematica, Maple, MathCAD, etc.  As an exercise I decided to solve this using python, as I&#8217;ve been trying to migrate from using Matlab to using python more.  We&#8217;ll need the equations written out in matrix form to be able to solve them numerically:<\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<p>$$\\mathbf{y}=  \\begin{bmatrix} x \\\\ v \\end{bmatrix}$$<\/p>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<p>$$\\frac{d\\mathbf{y}}{dt}=  \\begin{bmatrix} v \\\\ -g-\\textrm{sgn}(v)\\frac{1}{2}\\frac{\\rho}{m} v^2 A C_d(v) \\end{bmatrix}$$<\/p>\n<\/div><\/div>\n\n\n\n<p>$$\\mathbf{y}(0)= \\begin{bmatrix} 0\\\\ v_0 \\end{bmatrix}$$<\/p>\n<\/div><\/div>\n\n\n\n<p>We need the sign function \\(\\textrm{sgn}(v)\\) so that air resistance is always <em>resistive<\/em>: in other words it has to act against the direction of the velocity.  If we just kept it as a minus sign, it would work correctly when the bullet is traveling upward, but when it switches to moving downward it would instead <em>accelerate <\/em>it downwards. This ensures that air resistance will always slow the bullet down, regardless of whether it&#8217;s moving up or down.<\/p>\n<\/div><\/div>\n\n\n\n<p>Solving those equations (I&#8217;ll share the code at the bottom of this post) we get the following curves for the bullet height and velocity:<\/p>\n\n\n\n<figure class=\"wp-block-gallery columns-2 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><img loading=\"lazy\" decoding=\"async\" width=\"350\" height=\"334\" src=\"https:\/\/www.moroha.net\/blog\/wp-content\/uploads\/2020\/12\/height01-1.png\" alt=\"\" data-id=\"897\" data-full-url=\"https:\/\/www.moroha.net\/blog\/wp-content\/uploads\/2020\/12\/height01-1.png\" data-link=\"https:\/\/www.moroha.net\/blog\/?attachment_id=897\" class=\"wp-image-897\" srcset=\"https:\/\/www.moroha.net\/blog\/wp-content\/uploads\/2020\/12\/height01-1.png 350w, https:\/\/www.moroha.net\/blog\/wp-content\/uploads\/2020\/12\/height01-1-300x286.png 300w\" sizes=\"auto, (max-width: 350px) 100vw, 350px\" \/><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><img loading=\"lazy\" decoding=\"async\" width=\"350\" height=\"333\" src=\"https:\/\/www.moroha.net\/blog\/wp-content\/uploads\/2020\/12\/velocity01.png\" alt=\"\" data-id=\"898\" data-full-url=\"https:\/\/www.moroha.net\/blog\/wp-content\/uploads\/2020\/12\/velocity01.png\" data-link=\"https:\/\/www.moroha.net\/blog\/?attachment_id=898\" class=\"wp-image-898\" srcset=\"https:\/\/www.moroha.net\/blog\/wp-content\/uploads\/2020\/12\/velocity01.png 350w, https:\/\/www.moroha.net\/blog\/wp-content\/uploads\/2020\/12\/velocity01-300x285.png 300w\" sizes=\"auto, (max-width: 350px) 100vw, 350px\" \/><\/figure><\/li><\/ul><figcaption class=\"blocks-gallery-caption\">Solution to bullet trajectory problem<\/figcaption><\/figure>\n\n\n\n<p>The bullet reaches a maximum height of 3917.4 m in 21.70 s.  It then impacts the ground at a velocity of 147.7 m\/s at 58.27 s. You can see that the bullet took a lot longer to hit the ground after falling form the apex than it did to get there, because drag had slowed it down a lot by that time.  Also you can see that by the time the bullet is hitting the ground that the velocity curve is almost completely flat, indicating that the bullet has just about reached its terminal velocity.<\/p>\n\n\n\n<p>So the next question is, are all of our assumptions valid?  The bullet is traveling almost 4 km into the air, and we know that the air gets thinner as we go higher in altitude.  The drag is proportional to the density of the air, so that means there should be less air resistance at higher altitudes.<\/p>\n\n\n\n<p>Can we calculate the density of the air as a function of the height of the bullet?  Yes, we can!  Wikipedia is our friend here, as it has the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Density_of_air\">exact equation<\/a> we need:<\/p>\n\n\n\n<p>$$\\rho=\\frac{P_0 M \\left( 1-\\frac{L x}{T_0} \\right)^{\\frac{gM}{Rx} -1}}{R T_0}$$<\/p>\n\n\n\n<p>Where \\(x\\) is the height above sea level, \\(g\\) is gravitational acceleration as before, and the other parameters are as follows:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Symbol<\/strong><\/td><td><strong>Parameter<\/strong><\/td><td><strong>Value<\/strong><\/td><\/tr><tr><td>\\(P_0\\)<\/td><td>atmospheric pressure at sea level<\/td><td>101325 Pa<\/td><\/tr><tr><td>\\(M\\)<\/td><td>molar mass of air<\/td><td>0.0290 kg\/mol<\/td><\/tr><tr><td>\\(L\\)<\/td><td>temperature lapse rate<\/td><td>0.0065 K\/m<\/td><\/tr><tr><td>\\(T_0\\)<\/td><td>temperature at sea level<\/td><td>15\u00c2\u00b0C (288.15 K)<\/td><\/tr><tr><td>\\(R\\)<\/td><td>universal gas constant<\/td><td>8.314 J\/(K mol)<\/td><\/tr><\/tbody><\/table><figcaption>Additional parameters for air density model<\/figcaption><\/figure>\n\n\n\n<p>There is one other thing to consider: our table for determining the drag coefficient is listed as a function of the Mach number, which is the velocity divided by the speed of sound.  Well, the speed of sound <em>also<\/em> depends on the density and pressure of the air. The <a href=\"https:\/\/en.wikipedia.org\/wiki\/Speed_of_sound\">specific formula<\/a> for this is also in Wikipedia. In the end it becomes a function of the temperature:<\/p>\n\n\n\n<p>$$c=\\sqrt{\\frac{\\gamma R T}{M}}=\\sqrt{\\frac{\\gamma R T_0\\left(  1-\\frac{Lx}{T_0}\\right)}{M}}$$<\/p>\n\n\n\n<p>Where \\(\\gamma\\) is the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Heat_capacity_ratio\">heat capacity ratio<\/a>, which for air is equal to 1.4.<\/p>\n\n\n\n<p>Adding these corrections to the air density and speed of sound changing as a function of altitude, we get the following solutions for the detailed model compared to the simple model:<\/p>\n\n\n\n<figure class=\"wp-block-gallery columns-2 is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><img loading=\"lazy\" decoding=\"async\" width=\"350\" height=\"334\" src=\"https:\/\/www.moroha.net\/blog\/wp-content\/uploads\/2020\/12\/height02.png\" alt=\"\" data-id=\"903\" data-full-url=\"https:\/\/www.moroha.net\/blog\/wp-content\/uploads\/2020\/12\/height02.png\" data-link=\"https:\/\/www.moroha.net\/blog\/?attachment_id=903\" class=\"wp-image-903\" srcset=\"https:\/\/www.moroha.net\/blog\/wp-content\/uploads\/2020\/12\/height02.png 350w, https:\/\/www.moroha.net\/blog\/wp-content\/uploads\/2020\/12\/height02-300x286.png 300w\" sizes=\"auto, (max-width: 350px) 100vw, 350px\" \/><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><img loading=\"lazy\" decoding=\"async\" width=\"350\" height=\"333\" src=\"https:\/\/www.moroha.net\/blog\/wp-content\/uploads\/2020\/12\/velocity02.png\" alt=\"\" data-id=\"904\" data-full-url=\"https:\/\/www.moroha.net\/blog\/wp-content\/uploads\/2020\/12\/velocity02.png\" data-link=\"https:\/\/www.moroha.net\/blog\/?attachment_id=904\" class=\"wp-image-904\" srcset=\"https:\/\/www.moroha.net\/blog\/wp-content\/uploads\/2020\/12\/velocity02.png 350w, https:\/\/www.moroha.net\/blog\/wp-content\/uploads\/2020\/12\/velocity02-300x285.png 300w\" sizes=\"auto, (max-width: 350px) 100vw, 350px\" \/><\/figure><\/li><\/ul><figcaption class=\"blocks-gallery-caption\">Detailed model results<\/figcaption><\/figure>\n\n\n\n<p>For the more detailed model, the bullet reaches an apex of 4400 m in 24.0 s, and it impacts the ground at a velocity of 155.1 m\/s at 61.76 seconds.  So as we surmised, the bullet is able to travel higher than predicted with the simple model because at high altitudes the air is thinner and provides less air resistance.<\/p>\n\n\n\n<p>We could also try to account for gravitational acceleration decreasing as we increase in altitude, but at a height of 4 km this is only a 0.1% difference: this is actually smaller than the difference in gravitational acceleration between being at one of the poles and being at the equator: it&#8217;s approximately 0.3% less at the equator due to the spinning of the earth, and the earth bulging slightly at the equator.  We can safely ignore both of these effects.<\/p>\n\n\n\n<p>So as promised, here is my code.  I found a small error that I fixed, it should be working now:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># -*- coding: utf-8 -*-\n\"\"\"\nCreated on Wed Dec  2 18:50:14 2020\n@author: Derek Bassett\n\"\"\"\nimport pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nfrom scipy.integrate import solve_ivp\n\n# parameters\nv0 = 2900           # muzzle velocity &#091;ft\/s]\nv0 = v0*12*2.54e-2  # &#091;m\/s]\nx0 = 0              # initial position &#091;m]\nd = 1.3e-2          # bullet diameter .50 BMG &#091;m]\nA = np.pi*(0.5*d)**2 # cross-sectional area &#091;m^2]\nm = 0.043           # bullet mass FMJBT-PMC &#091;kg]\ntf = 65             # time to end calculation &#091;s]\n\n# constants\ng = 9.80665         # gravitational acceleration &#091;m\/s^2]\nR = 8.31447         # universal gas constant &#091;J\/(K*mol)]\nM = 0.0289654       # molar mass of dry air &#091;kg\/mol]\np0 = 101325         # sea level standard atmospheric pressure &#091;Pa]\nT0 = 288.15         # sea level standard temperature &#091;K]\nL = 0.0065          # temperature lapse rate &#091;K\/m]\ngamma = 1.4         # adiabatic index for dry air &#091;1]\n\ndef rho_air(h): # calculate density of air as a function of altitude  \n    rho = ((p0*M)\/(R*T0))*(1-(L*h)\/T0)**((g*M)\/(R*L)-1)\n    return rho\n\ndef csound(h): # calculate the speed of sound as a function of altitude\n    c = np.sqrt((gamma*R*T0*(1-(L*h)\/T0))\/M)\n    return c\n\n# use data from csv for drag coefficient\ndf = pd.read_csv('drag_coefficient.csv',header=None)\nCDarray = df.to_numpy()\n\ndef CD_sim(u): # calculate the drag coefficient as a function of velocity and height\n    # calculate speed of sound c\n    c = csound(x0)\n    # calculate Mach number Ma\n    Ma = u\/c\n    # interpolate to calculate the drag coefficient CD\n    CD = np.interp(Ma,CDarray&#091;:,0],CDarray&#091;:,1])\n    return CD\n\ndef CD(u,h): # calculate the drag coefficient as a function of velocity and height\n    # calculate speed of sound c\n    c = csound(h)\n    # calculate Mach number Ma\n    Ma = u\/c\n    # interpolate to calculate the drag coefficient CD\n    CD = np.interp(Ma,CDarray&#091;:,0],CDarray&#091;:,1])\n    return CD\n\ndef yprime_sim(t,y):# simple formulation neglecting change in air density with altitude\n    ydot = np.empty(2)\n    ydot&#091;0] = y&#091;1]\n    ydot&#091;1] = -g - np.sign(y&#091;1])*0.5*(rho_air(x0)\/m)*y&#091;1]*y&#091;1]*A*CD_sim(y&#091;1])\n    return ydot\n\ndef yprime(t,y):# formulation that accounts for the change in air density with altitude\n    ydot = np.empty(2)\n    ydot&#091;0] = y&#091;1]\n    ydot&#091;1] = -g - np.sign(y&#091;1])*0.5*(rho_air(y&#091;0])\/m)*y&#091;1]*y&#091;1]*A*CD(y&#091;1],y&#091;0])    \n    return ydot\n\n# stop simulation when bullet hits ground\ndef hit_ground(t,y): return y&#091;0]\nhit_ground.terminal = True\nhit_ground.direction = -1\n# determine where velocity=0\ndef apex(t,y): return y&#091;1]\n\nY0 = np.array(&#091;x0,v0])\nt = np.linspace(0,tf,1001)\n\n# solve equations\nsol1 = solve_ivp(fun=yprime_sim,t_span=(0,tf),y0=Y0,t_eval=t,events=(apex,hit_ground),dense_output=True)\nsol2 = solve_ivp(fun=yprime,t_span=(0,tf),y0=Y0,t_eval=t,events=(apex,hit_ground),dense_output=True)\n\n# plot results\nfig = plt.figure(num=0,figsize=(3.5,3.0),dpi=100,facecolor=None,edgecolor=None,frameon=False,clear=True)\nplt.plot(sol1.t,sol1.y&#091;0,:],'b-',label='simple model')\nplt.plot(sol2.t,sol2.y&#091;0,:],'r-',label='detailed model')\nplt.legend(loc='best')\nplt.xlabel('time &#091;s]')\nplt.ylabel('height &#091;m]')\nplt.grid()\nplt.tight_layout()\nplt.show()\nfig.savefig('height02.png',transparent=True)\n\nfig = plt.figure(num=1,figsize=(3.5,3.0),dpi=100,facecolor=None,edgecolor=None,frameon=False,clear=True)\nplt.plot(sol1.t,sol1.y&#091;1,:],'b-',label='simple model')\nplt.plot(sol2.t,sol2.y&#091;1,:],'r-',label='detailed model')\nplt.legend(loc='best')\nplt.xlabel('time &#091;s]')\nplt.ylabel('velocity &#091;m\/s]')\nplt.grid()\nplt.tight_layout()\nplt.show()\nfig.savefig('velocity02.png',transparent=True)\n\nprint(f'Simple model reached apex of {sol1.y_events&#091;0]&#091;0]&#091;0]:.1f} m at t={sol1.t_events&#091;0]&#091;0]:.2f} s. '+\n      f'It impacted the ground at a velocity of {-sol1.y_events&#091;1]&#091;0]&#091;1]:.1f} m\/s at t={sol1.t_events&#091;1]&#091;0]:.2f} s.')\nprint(f'Detailed model reached apex of {sol2.y_events&#091;0]&#091;0]&#091;0]:.1f} m at t={sol2.t_events&#091;0]&#091;0]:.2f} s. '+\n      f'It impacted the ground at a velocity of {-sol2.y_events&#091;1]&#091;0]&#091;1]:.1f} m\/s at t={sol2.t_events&#091;1]&#091;0]:.2f} s.')\n<\/code><\/pre>\n\n\n\n<p>Feel free to copy the code and play around with it.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>There was a question posted on the physics subreddit asking how high in the air a bullet would go if you shot it straight up. It was later removed by the moderators (who knows why?), but I thought it was &hellip; <a href=\"https:\/\/www.moroha.net\/blog\/archives\/880\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[22],"class_list":["post-880","post","type-post","status-publish","format-standard","hentry","category-general","tag-physics"],"_links":{"self":[{"href":"https:\/\/www.moroha.net\/blog\/wp-json\/wp\/v2\/posts\/880","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.moroha.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.moroha.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.moroha.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.moroha.net\/blog\/wp-json\/wp\/v2\/comments?post=880"}],"version-history":[{"count":24,"href":"https:\/\/www.moroha.net\/blog\/wp-json\/wp\/v2\/posts\/880\/revisions"}],"predecessor-version":[{"id":911,"href":"https:\/\/www.moroha.net\/blog\/wp-json\/wp\/v2\/posts\/880\/revisions\/911"}],"wp:attachment":[{"href":"https:\/\/www.moroha.net\/blog\/wp-json\/wp\/v2\/media?parent=880"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.moroha.net\/blog\/wp-json\/wp\/v2\/categories?post=880"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.moroha.net\/blog\/wp-json\/wp\/v2\/tags?post=880"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}