All about flooble | fun stuff | Get a free chatterbox | Free JavaScript | Avatars    
perplexus dot info

Home > Shapes > Geometry
Objective: Integer! (Posted on 2016-06-14) Difficulty: 3 of 5

O1 is a circle with diameter AOB, of radius r.

C is a point on AB between O and A, and the length of AC is s.

O2 is a second circle, radius t, centred on C, such that s < t < r, so that some part of O2 will always fall outside O1.

D is the common area of O1 and O2.

If r, s, and t are all integer values less than 100 units, say of centimetres, when is D closest to an integer value?

For example, if r=97, s=2, and t=78, then D = 8185.006 cm^2, a near miss. Is there a neater solution than this?

No Solution Yet Submitted by broll    
No Rating

Comments: ( Back to comment list | You must be logged in to post comments.)
Solution computer solution | Comment 2 of 4 |
       5    bestdiff=1
       6    kill "objintgr.txt":open "objintgr.txt" for output as #2
      10    For r = 3 To 100
      20    For t = 2 to r-1
      30    For s = 1 to t-1
      40       cosa = (r * r + (r - s) * (r - s) - t * t) / (2 * r * (r - s))
      50       sina = Sqr(1 - cosa * cosa)
      60       a = Atn(sina / cosa)
      70       hgt = r * sina
      80       base = r * cosa
      90       d1 = r * r * a - base * hgt
     100       
     110       cosc = (t * t + (r - s) * (r - s) - r * r) / (2 * t * (r - s))
     120       sinc = Sqr(1 - cosc * cosc)
     121       if cosc=0 then
     122         :c=#pi/2
     123       :else
     130          :c = Atn(sinc / cosc)
     140       If c < 0 Then c = c + #pi
     150       hgt = t * sinc
     160       base = t * cosc
     170       d2 = t * t * c - base * hgt
     180       
     190       d = d1 + d2
     191       dround=int(d+.5)
     192       if abs(d-dround) <= bestdiff then
     193          :print r,t,s,d
     194          :print #2, r,t,s,d
     195          :bestdiff=abs(d-dround)
     210     next
     220     next
     230     next
     240     close #2 
     
 to find successively better approximations to integers:    
     
  r   t   s            D    
 3   2   1   9.3204778955757026782 
 5   2   1   9.6991563660426482314 
 5   3   1   18.2246946609861792419 
 5   3   2   24.082570710619696239 
 7   5   4   72.0498673837428549039 
 8   3   1   18.9787625988235752569 
 9   6   1   60.0117226015716722812 
 10   7   6   146.0034085891044524847 
 11   9   6   209.9991389657466712032 
 22   18   6   625.0007644328349099103 
 23   9   4   187.9996978940880101749 
 24   19   4   613.999794044358302884 
 32   11   5   285.0001721145300130949 
 35   34   25   3049.0000917415865148564 
 36   14   1   310.0000559545887104217 
 45   13   1   275.000030503785316484 
 45   33   24   2989.0000155083033543965 
 73   22   2   798.9999990508283636297 


verified in VB:

3 2 1   9.3204778955757
5 2 1   9.69915636604265
5 3 1   18.2246946609862
5 3 2   24.0825707106197
7 5 4   72.0498673837429
8 3 1   18.9787625988236
9 6 1   60.0117226015717
10 7 6   146.003408589104
11 9 6   209.999138965747
22 18 6   625.000764432835
23 9 4   187.999697894088
24 19 4   613.999794044358
32 11 5   285.00017211453
35 34 25   3049.00009174159
36 14 1   310.000055954589
45 13 1   275.000030503785
45 33 24   2989.0000155083
73 22 2   798.999999050828

DefDbl A-Z
Dim crlf$


Private Sub Form_Load()
 Form1.Visible = True
 
 
 Text1.Text = ""
 crlf = Chr$(13) + Chr$(10)
 
 pi = Atn(1) * 4
 
 bestdiff = 1
 For r = 3 To 100
 For t = 2 To r - 1
 For s = 1 To t - 1
    DoEvents
    cosa = (r * r + (r - s) * (r - s) - t * t) / (2 * r * (r - s))
    sina = Sqr(1 - cosa * cosa)
    a = Atn(sina / cosa)
    hgt = r * sina
    base = r * cosa
    d1 = r * r * a - base * hgt
    
    cosc = (t * t + (r - s) * (r - s) - r * r) / (2 * t * (r - s))
    sinc = Sqr(1 - cosc * cosc)
    
If cosc = 0 Then
  c = pi / 2
Else
 c = Atn(sinc / cosc)
End If
If c < 0 Then c = c + pi
    
    
    
    
    If c < 0 Then c = c + pi
    hgt = t * sinc
    base = t * cosc
    d2 = t * t * c - base * hgt
    
    d = d1 + d2
    
    dround = Int(d + 0.5)
    If Abs(d - dround) <= bestdiff Then
      Text1.Text = Text1.Text & r & Str(t) & Str(s) & "   " & d & crlf
      bestdiff = Abs(d - dround)
    End If
    
    
    
 Next
 Next
 Next
  
 Text1.Text = Text1.Text & crlf & " done"
  
End Sub


  Posted by Charlie on 2016-06-14 15:43:05
Please log in:
Login:
Password:
Remember me:
Sign up! | Forgot password


Search:
Search body:
Forums (0)
Newest Problems
Random Problem
FAQ | About This Site
Site Statistics
New Comments (4)
Unsolved Problems
Top Rated Problems
This month's top
Most Commented On

Chatterbox:
Copyright © 2002 - 2017 by Animus Pactum Consulting. All rights reserved. Privacy Information