[Yardım Lütfen] İki Çemberin Kesişim Noktaları Nasıl Bulunur?

merakettim

Homo Sapiens Sapiens
Özel üye
Merhaba arkadaşlar;
Sorudan da anlaşılacağı üzere analitik düzlemde iki çemberin kesişim noktaları nasıl bulunur?
 

YoRuMSuZ

Biz işimize bakalım...
Konuya inanılmaz düzeyde uzağım ama google amcaya sorunca çemberin kesişim noktaları ile iligili şöyle bir bilgiye ulaştım @merakettim :)

Çember denklemleri aşağıdaki gibidir.

(x - x1)^2 + (y - y1)^2 = r1^2

(x - x2)^2 + (y - y2)^2 = r2^2

Kesişim Noktaları ise aşağıdaki gibidir.

T1-3-15x.gif



T1-3-15y.gif



T1-3-15d.gif
 

merakettim

Homo Sapiens Sapiens
Özel üye
Evet hocam bunu denedim ve doğru çıkıyo. Bi ekleme yapmam lazım ama.
1. nokta için x değeri y2-y1/2d^2 den önce +, y değeri ise x2-x1/2d^2 - olmalı
2. nokta için x değeri y2-y1/2d^2 den önce -, y değeri ise x2-x1/2d^2 + olmalı

ben bunu deneyip bi türlü tutturamıyodum meğerse burada yanlışlık yapmışım. Teşekkür ederim :)

Bu da cember.h olsun :)
PHP:
#include <math.h>

class Cember2{
      public:
struct _cember{
        float x,y,r;
        }cember1,cember2;
        
struct _nokta{
        float x,y;
        }nokta1,nokta2;
        
float dHesapla(float x1,float y1,float x2,float y2){
      
      return sqrt(((x2-x1)*(x2-x1))+((y2-y1)*(y2-y1)));
      }
      
float nokta1XHesapla(float x1,float y1,float r1,float x2,float y2,float r2){
      float d,x;
      d=dHesapla(x1,y1,x2,y2);
      
      x=(x2+x1)/2;
      x+=((x2-x1)*(pow(r1,2)-pow(r2,2)))/(2*pow(d,2));
      
      
      x+=((y2-y1)/(2*pow(d,2)))*sqrt((pow(r1+r2,2)-pow(d,2))*(pow(d,2)-pow(r2-r1,2)));
      return x;
      }
      
float nokta2XHesapla(float x1,float y1,float r1,float x2,float y2,float r2){
      float d,x;
      d=dHesapla(x1,y1,x2,y2);
      
      x=(x2+x1)/2;
      x+=((x2-x1)*(pow(r1,2)-pow(r2,2)))/(2*pow(d,2));
      
      
      x-=((y2-y1)/(2*pow(d,2)))*sqrt((pow(r1+r2,2)-pow(d,2))*(pow(d,2)-pow(r2-r1,2)));
      return x;
      }
float nokta1YHesapla(float x1,float y1,float r1,float x2,float y2,float r2){
      float d,y;
      d=dHesapla(x1,y1,x2,y2);
      
      y=(y2+y1)/2;
      y+=((y2-y1)*(pow(r1,2)-pow(r2,2)))/(2*pow(d,2));
      
      
      y-=((x2-x1)/(2*pow(d,2)))*sqrt((pow(r1+r2,2)-pow(d,2))*(pow(d,2)-pow(r2-r1,2)));
      return y;
      }
float nokta2YHesapla(float x1,float y1,float r1,float x2,float y2,float r2){
      float d,y;
      d=dHesapla(x1,y1,x2,y2);
      
      y=(y2+y1)/2;
      y+=((y2-y1)*(pow(r1,2)-pow(r2,2)))/(2*pow(d,2));
      
      
      y+=((x2-x1)/(2*pow(d,2)))*sqrt((pow(r1+r2,2)-pow(d,2))*(pow(d,2)-pow(r2-r1,2)));
      return y;
      }
      
      Cember2(float x1,float y1,float r1,float x2,float y2,float r2){

    cember1.x=x1;
    cember1.y=y1;
    cember1.r=r1;
    
    cember2.x=x2;
    cember2.y=y2;
    cember2.r=r2;
    
    
    
    nokta1.x=nokta1XHesapla(cember1.x,cember1.y,cember1.r,cember2.x,cember2.y,cember2.r);
    nokta1.y=nokta1YHesapla(cember1.x,cember1.y,cember1.r,cember2.x,cember2.y,cember2.r);
    nokta2.x=nokta2XHesapla(cember1.x,cember1.y,cember1.r,cember2.x,cember2.y,cember2.r);
    nokta2.y=nokta2YHesapla(cember1.x,cember1.y,cember1.r,cember2.x,cember2.y,cember2.r);
              
               }
      
      
      }
;
 

merakettim

Homo Sapiens Sapiens
Özel üye
Amaca göre değişir. Programcı hangi yoldan gidecek ona bakmak lazım. Yani programlayıp da ne yapacan? diye sormak lazım. Ama gönlüm der ki "C" ile başlanılsın. Çünkü her yol açık. İster Pic programla(Programlanabilir entegreler), ister Raspbian ile uygulama geliştir (Raspberry pi serisinin Debian'dan devşirme işletim sistemi), ister oyun yap(OpenGL-DirectX), ister üst seviyeye geç "c++" öğren, ister JAVA'ya geç(JavaSe,JavaMe,Android), iste PHP geç, ister JavaScript geç, ister C# geç.Hepsinin söz dizimi %90 aynı. Yani C ile başlayın, gerisi sizin isteklerinize kalmış.(BENCE)
Yukardaki sınıf c++ sınıfı mesela :)
 

_nehir_

Schrödinger'in Kedisi ♕
Özel üye
Geldim :D Selam merakettim, forumda iş konuşmak hoş olmuyor biliyorum ama tecrübelerini paylaşırsan acayip makbule geçer şu an biraz sıkıntılı bir durumdayım :)) C#, sql ve arduino biliyorum. Reaktör otomasyonlarıyla ilgili akademik bir çalışmaya başlayacağım birkaç ay içinde. O zaman kadar eksiklerimi kapatmaya çalışıyorum. Sen ne tavsiye edersin? Arduino sensörleri falan bayağı uygun ve kolay görünüyor ama bizim üretimlere dayanmayacak gibi (120 derece sterilizasyon sıcaklığına çıkılıyor vs.) Özellikle sensör konusu çok kritik şu an benim için. Analog sensör kullanıp sinyali dijitale çeviren converterler de varmış, onun yazılımları nasıl hiç bilmiyorum. Kısacası şu an pek bir şey bilmiyorum, kafam çok karışık :D
 

merakettim

Homo Sapiens Sapiens
Özel üye
Arduino ile hiç uğraşmadım Pic'ciyim ben :D Ama termokupl lar 450 dereceye kadar çıkıyo. Ben motosikletim için yapmıştım bitane. 125cc motorlar hava soğutmalı malum kışın ön tarafı kapatıyoruz. Bu yüzden motor ısınıyo. İstersen örneği atabilirm sana fakat termokupllar analog sinyal vermiyo. Bunun yerine miniminnacık elektrik üretiyolar. Biz de transistörün biraz özellişmiş hali ile yükseltiyoruz. anfi gibi düşün. bunu da seri porttan alıyoruz (Tx-Rx) bacağından. Tam olarak projeyi bilirsem daha yardımcı olurum :)
 
Top