Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/117: Рейтинг темы: голосов - 117, средняя оценка - 4.57
1 / 1 / 0
Регистрация: 04.05.2011
Сообщений: 14

Попадает ли точка в треугольник

04.05.2011, 11:19. Показов 23032. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!!! Пожалуйста, помогите с решением задачи на Microsoft Visual C++ 6.0
Нужно определить, попадает ли точка внутрь треугольника. Координаты вершин треугольника и точки задаются пользователем.
Заранее всем огромное спасибо за помощь!
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.05.2011, 11:19
Ответы с готовыми решениями:

Треугольник задан координатами вершин х 1 у1 х 2 у 2 х 3 у 3 точка а задана координатами х у требуется написать программу определяющую попадает ли указанная точка в заданный треугольник
Треугольник задан координатами вершин х 1 у1 х 2 у 2 х 3 у 3 точка а задана координатами х у требуется написать программу определяющую...

Определить, попадает ли точка M(x,y) в треугольник с вершинами А(1;5) В(7;6) и С(4;1)
1)Определить, попадает ли точка M(x,y) в область треугольник с вершиними А(1;5) В(7;6) и С(4;1) Sub Задание_9_1() x =...

Определить, попадает ли точка в заданный треугольник
Я тут подумал и понял что его можно решить через нахождение длин трёх сторон, полупериметр и затем уже через формулу Герона подсчитать...

12
Программист
 Аватар для prZzZ
119 / 97 / 11
Регистрация: 22.03.2011
Сообщений: 244
04.05.2011, 11:46
Определить, попадает ли указанная точка в заданный треугольник
0
Freelance
Эксперт С++
 Аватар для asics
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
04.05.2011, 15:52
Masha2011, Точка в треугольнике
0
1 / 1 / 0
Регистрация: 04.05.2011
Сообщений: 14
04.05.2011, 18:01  [ТС]
Ребят, спасибо вам огромное =)
0
6 / 5 / 2
Регистрация: 27.07.2013
Сообщений: 22
04.08.2013, 15:03
C++
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
// aned.
// ЗАДАНИЕ: даны координаты треугольника ABC и точки P
// определить находится ли точка внутри треугольника
// АЛГОРИТМ: 1.строим треугольники с вершиной P
// 2.находим длины всех отрезков
// 3.находим углы с вершиной P
// 4.сумма углов должна равняться 2ПИ  или 360 градусам
 
#include <iostream>
#include <math.h>
#include <iomanip>
 
using namespace std;
 
float X1,X2,X3,Y1,Y2,Y3; // координаты треугольника ABC
float X,Y; // координаты точки P
 
float AB,AC,BC; // длины отрезков треугольника ABC
float PA,PB,PC; // длины отрезков из точки P
 
float APB,APC,BPC; // углы у вершины P
 
int main()
{
    setlocale(0,"");
 
    cout<<"Введите X1 :";
    cin>>X1;
    cout<<"Введите Y1 :";
    cin>>Y1;
    cout<<"Введите X2 :";
    cin>>X2;
    cout<<"Введите Y2 :";
    cin>>Y2;
    cout<<"Введите X3 :";
    cin>>X3;    
    cout<<"Введите Y3 :";
    cin>>Y3;
    cout<<"Введите X :";
    cin>>X;
    cout<<"Введите Y:";
    cin>>Y;
 
    AB=sqrt(pow((X1-X2),2)+pow((Y1-Y2),2));
    AC=sqrt(pow((X1-X3),2)+pow((Y1-Y3),2));
    BC=sqrt(pow((X2-X3),2)+pow((Y2-Y3),2));
    // ----------------------------------------
    PA=sqrt(pow((X-X1),2)+pow((Y-Y1),2));
    PB=sqrt(pow((X-X2),2)+pow((Y-Y2),2));
    PC=sqrt(pow((X-X3),2)+pow((Y-Y3),2));
 
    cout<<endl<<AB<<endl<<AC<<endl<<BC<<endl;
    cout<<endl<<PA<<endl<<PB<<endl<<PC<<endl;
    // ----------------------------------------------
    APB=acos((pow(PB,2)+pow(PA,2)-pow(AB,2))/(2*PA*PB));
    APC=acos((pow(PC,2)+pow(PA,2)-pow(AC,2))/(2*PA*PC));
    BPC=acos((pow(PB,2)+pow(PC,2)-pow(BC,2))/(2*PC*PB));
 
    cout<<endl<<APB<<endl<<APC<<endl<<BPC<<endl;
    // ----------------------------------------
    double Summ=(APB+APC+BPC);// сумма углов у вершины P
    cout<<endl<<Summ<<endl;
 
    cout<<fixed;               // оставляем два знака после запятой
    cout<<setprecision(2);
    cout<<endl<<Summ<<endl;
    int Summ1=(Summ/2)*100; // приводим к int
 
    cout<<endl<<Summ1<<endl;
 
    // -----------------------------------
    switch(Summ1)
    {
        case 314:
 
            cout<<endl<<"YES!"<<endl;
        break;
 
        default :
            cout<<endl<<"NO!"<<endl;
    }
 
 
    cin.get();
    cin.get();
    return 0;
}
0
0 / 0 / 0
Регистрация: 25.12.2013
Сообщений: 9
29.12.2013, 03:24
y=x*(x1+x2)/(y1+y2)
Точка на отрезке , на двух отрезках получается по точке , если оба игрека выше точка не входит если оба ниже так же
если один y Выше другой ниже то входит

получается и так
y=y*(y1+y2)/(x1+x2)

Java
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
long x1=0;
        long x2=0;
        long x3=0;
        long x=0;
        long yp1=0;
        long yp2=0;
        long xp1=0;
        long xp2=0;
        long y2=0;
        long y3=0;
        long y1=0;
        long ind1=0;
        long sx1=0;
        long sx2=0;
        long sx3=0;
        long sy2=0;
        long sy3=0;
        long sy1=0;
        long y=0;
        
        long a=0;// здесь входные координаты
        long b=0;
        long c=0;
        long d=0;
        long e=0;
        long f=0;
        
        //сортировка координат по x          
        if((a<=b)&&(b<=c)){x1=a; x2=b; x3=c; y1=d; y2=e; y3=f;}
        if((a<=c)&&(c<=b)){x1=a; x2=c; x3=b; y1=d; y2=f; y3=e;}
        if((b<=a)&&(a<=c)){x1=b; x2=a; x3=c; y1=e; y2=d; y3=f;}
        if((c<=a)&&(a<=b)){x1=c; x2=a; x3=b; y1=f; y2=d; y3=e;}
        if((b<=c)&&(c<=a)){x1=b; x2=c; x3=a; y1=e; y2=f; y3=d;}
        if((c<=b)&&(b<=a)){x1=c; x2=b; x3=a; y1=f; y2=e; y3=d;}
        
        
        
        //Сортировка координат по y
        if((d<=e)&&(e<=f)){sy1=d; sy2=e; sy3=f; sx1=a; sx2=b; sx3=c;}
        if((f<=e)&&(e<=d)){sy1=f; sy2=e; sy3=d; sx1=c; sx2=b; sx3=a;}
        if((e<=d)&&(d<=f)){sy1=e; sy2=d; sy3=f; sx1=b; sx2=a; sx3=c;}
        if((f<=d)&&(d<=e)){sy1=f; sy2=d; sy3=e; sx1=c; sx2=a; sx3=b;}
        if((e<=f)&&(f<=d)){sy1=e; sy2=f; sy3=d; sx1=b; sx2=c; sx3=a;}
        if((d<=f)&&(f<=e)){sy1=f; sy2=e; sy3=d; sx1=a; sx2=c; sx3=b;}
        
        
        
        
        
//проверка по х  
if((x1!=x2)&&(x1!=x3)&&(x3!=x2)){       
if(x>x1){if(x<(x2)){
    yp1=x*(y1+y2)/(x1+x2); yp2=x*(y1+y3)/(x1+x3);
    
    if(((yp1>y1)&&(yp2<y2))||((yp1<y1)&&(yp2>y2))){ind1=1;}
            
        }}
  
if(x<x3){if(x>x2){
               yp1=x*(y+y2)/(x1+x2); yp2=x*(y1+y3)/(x1+x3);
               
            if(((yp1>y1)&&(yp2<y2))||((yp1<y1)&&(yp2>y2))){ind1=1;}
                    
                }}
            
    
}else{
 
//проверка по у
 
if((sy1!=sy2)&&(sy1!=y3)&&(sy3!=sy2)){      
if(y>sy1){if(y<(sy2)){
    xp1=y*(sx1+sx2)/(sy1+sy2); xp2=y*(sx1+sx3)/(sy1+sy3);
    
    if(((xp1>sx1)&&(xp2<sx2))||((xp1<sx1)&&(xp2>sx2))){ind1=1;}
            
        }}
  
if(y<sy3){if(y>sy2){
               xp1=y*(x+sx2)/(sy1+sy2); xp2=x*(sx1+sx3)/(sy1+sy3);
               
            if(((xp1>sx1)&&(xp2<sx2))||((xp1<sx1)&&(xp2>sx2))){ind1=1;}
                    
                }}
        
 
}}
 
//если он прямоугольный
 
if(((x1==x2)&&(x2==x3))||((sy1==sy2)&&(sy2==sy3))){}else{
    if(((x1==x2)||(x3==x2))&&((sy1==sy2)||(sy2==sy3))){if((y>sy1)&&(y<sy3)){
        
    
         xp1=y*(x+sx2)/(sy1+sy2); xp2=x*(sx1+sx3)/(sy1+sy3);
         
    if(((x>xp1)&&(x<xp2))||((x<xp1)&&(x>xp2))){ind1=1;}
    
    }}}
 
 
   System.out.println(ind1);
Добавлено через 4 минуты
пока еще только получаю код , надо проверять на ошибки
а картинка этого простого метода на моей странице в вк есть
http://cs413922.vk.me/v4139228... H-wshI.jpg

Добавлено через 1 час 50 минут
Java
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
// Поправил код, если х есть равные хотябы один случай проверяется по y  если y есть равные хотябы
//один случай  проверяется по y, если есть и х равные и у то этот треугольник прямоугольный
//и в случае если это так внесен 3 этап получения
 
import java.lang.*;
import java.util.*;
import java.math.*;
public class Program {
    
    
    
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        long x1=0;
        long x2=0;
        long x3=0;
        long x=0;
        long yp1=0;
        long yp2=0;
        long xp1=0;
        long xp2=0;
        long y2=0;
        long y3=0;
        long y1=0;
        long ind1=0;
        long sx1=0;
        long sx2=0;
        long sx3=0;
        long sy2=0;
        long sy3=0;
        long sy1=0;
        long y=0;
        
        long a=0;
        long b=0;
        long c=0;
        long d=0;
        long e=0;
        long f=0;
        
        //сортировка координат по x          
        if((a<=b)&&(b<=c)){x1=a; x2=b; x3=c; y1=d; y2=e; y3=f;}
        if((a<=c)&&(c<=b)){x1=a; x2=c; x3=b; y1=d; y2=f; y3=e;}
        if((b<=a)&&(a<=c)){x1=b; x2=a; x3=c; y1=e; y2=d; y3=f;}
        if((c<=a)&&(a<=b)){x1=c; x2=a; x3=b; y1=f; y2=d; y3=e;}
        if((b<=c)&&(c<=a)){x1=b; x2=c; x3=a; y1=e; y2=f; y3=d;}
        if((c<=b)&&(b<=a)){x1=c; x2=b; x3=a; y1=f; y2=e; y3=d;}
        
        
        
        //Сортировка координат по y
        if((d<=e)&&(e<=f)){sy1=d; sy2=e; sy3=f; sx1=a; sx2=b; sx3=c;}
        if((f<=e)&&(e<=d)){sy1=f; sy2=e; sy3=d; sx1=c; sx2=b; sx3=a;}
        if((e<=d)&&(d<=f)){sy1=e; sy2=d; sy3=f; sx1=b; sx2=a; sx3=c;}
        if((f<=d)&&(d<=e)){sy1=f; sy2=d; sy3=e; sx1=c; sx2=a; sx3=b;}
        if((e<=f)&&(f<=d)){sy1=e; sy2=f; sy3=d; sx1=b; sx2=c; sx3=a;}
        if((d<=f)&&(f<=e)){sy1=f; sy2=e; sy3=d; sx1=a; sx2=c; sx3=b;}
        
        
        
        
    
        
        
        
ind1=0; //это число будет равно 1 если точка входит и 0 если она не входит 
//Проверка по x   
if((x1!=x2)&&(x1!=x3)&&(x3!=x2)){if(   ((y1==y2)&&(y1==y3))==false     ){
    
if(x>x1){if(x<(x2)){
    yp1=x*(y1+y2)/(x1+x2); yp2=x*(y1+y3)/(x1+x3);
    
    if(((yp1>y1)&&(yp2<y2))||((yp1<y1)&&(yp2>y2))){ind1=1;}
            
        }}
  
if(x<x3){if(x>x2){
               yp1=x*(y+y2)/(x1+x2); yp2=x*(y1+y3)/(x1+x3);
               
            if(((yp1>y1)&&(yp2<y2))||((yp1<y1)&&(yp2>y2))){ind1=1;}
                    
                }}
            
    
}}else{
 
 
//Проверка по y   
if((sy1!=sy2)&&(sy1!=y3)&&(sy3!=sy2)){  if(   ((sx1==sx2)&&(sx1==sx3))==false      ){   
if(y>sy1){if(y<(sy2)){
    xp1=y*(sx1+sx2)/(sy1+sy2); xp2=y*(sx1+sx3)/(sy1+sy3);
    
    if(((xp1>sx1)&&(xp2<sx2))||((xp1<sx1)&&(xp2>sx2))){ind1=1;}
            
        }}
  
if(y<sy3){if(y>sy2){
               xp1=y*(x+sx2)/(sy1+sy2); xp2=x*(sx1+sx3)/(sy1+sy3);
               
            if(((xp1>sx1)&&(xp2<sx2))||((xp1<sx1)&&(xp2>sx2))){ind1=1;}
                    
                }}
        
 
}}}//обре проверки завершились
 
 
//если треугольник прямоугольный(4 варианта прямоугольных треугольников)
if(   ( ((sx1==sx2)&&(sx2==sx3)) || ((sy1==sy2)&&(sy2==sy3)) )== false   ){
    
 if(  ((sx1==sx2)&&(sy1==sy2))||((sx2==sx3)&&(sy2==sy3))||((sx1==sx2)&&(sy2==sy3))||((sx2==sx3)&&(sy1==sy2))  )
{   
    
    if((y>sy1)&&(y<sy3)){
        
    
         xp1=y*(x+sx2)/(sy1+sy2); xp2=x*(sx1+sx3)/(sy1+sy3);
         
    if(((x>xp1)&&(x<xp2))||((x<xp1)&&(x>xp2))){ind1=1;}
    
    }}}
 
 
   System.out.println(ind1);
   
    }}
Добавлено через 6 часов 33 минуты
Все теперь работает, можна конечно для точек сделать условия с включением точек
работать будет чуток медленее но будет работать и напротив вершин треугольника
можна применить и для отрисовки треугольника в реальном времени
yp1 и yp2 точки треугольника напротив x
так я наверно и сделаю , так как при соствлении таблицы величина треугольников ограничена
а если пробивать весь квадрат по точкам то это занимает больше времени
а так как на принтере только на экране


Java
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
              double x1=0.000;
        double x2=0.000;
        double x3=0.000;
 
        double y1=0.000;
        double y2=0.000;
        double y3=0.000;
 
        double yp1=0.000;
        double yp2=0.000;
 
 
        double y=1.000;
        double x=1.000;
 
        double a=0.00000;
        double b=0.00000;
        double c=3.00000;
 
        double d=4.00000;
        double e=0.00000;
        double f=0.00000;
 
        int ind1=0;
        int k=0;
 
        //сортировка координат по x
        if((a<=b)&&(b<=c)){x1=a; x2=b; x3=c; y1=d; y2=e; y3=f;}
        if((a<=c)&&(c<=b)){x1=a; x2=c; x3=b; y1=d; y2=f; y3=e;}
        if((b<=a)&&(a<=c)){x1=b; x2=a; x3=c; y1=e; y2=d; y3=f;}
        if((c<=a)&&(a<=b)){x1=c; x2=a; x3=b; y1=f; y2=d; y3=e;}
        if((b<=c)&&(c<=a)){x1=b; x2=c; x3=a; y1=e; y2=f; y3=d;}
        if((c<=b)&&(b<=a)){x1=c; x2=b; x3=a; y1=f; y2=e; y3=d;}
 
        x1=x1+1.0000;  x2=x2+1.0000;  x3=x3+1.0000;  y1=y1+1.0000;  
        y2=y2+1.0000;   y3=y3+1.0000;  x=x+1.0000;  y=y+1.0000;  
 
 
        k=0;
        ind1=0; //это число будет равно 1 если точка входит и 0 если она не входит
        //Проверка по x
 
        if(x1==x2){k=k+1;}
        if(x1==x3){k=k+1;}
        
        
 
        if(x1!=x2){if(x1!=x3){if(x2!=x3){
        if(x>x1){if(x<x2){
        yp1=x*(y1+y2)/(x1+x2); yp2=x*(y1+y3)/(x1+x3);
        if(y>yp1){if(y<yp2){ind1=1;}}
        if(y<yp1){if(y>yp2){ind1=1;}} 
        }}
 
        if(x>x2){if(x<x3){
        yp1=x*(y2+y3)/(x2+x3); yp2=x*(y1+y3)/(x1+x3);
        if(y>yp1){if(y<yp2){ind1=1;}} 
        if(y<yp1){if(y>yp2){ind1=1;}} 
        }}
 
        }}}//завершение первого блока
        
        
    if(x1==x2){if(k<2){if(x1<x){if(x<x3){
        yp1=x*(y2+y3)/(x2+x3); yp2=x*(y1+y3)/(x1+x3);
        if(y>yp1){if(y<yp2){ind1=1;}} 
        if(y<yp1){if(y>yp2){ind1=1;}} 
        
    }}}}
    
    if(x3==x2){if(k<2){if(x1<x){if(x<x3){
        yp1=x*(y1+y2)/(x1+x2); yp2=x*(y1+y3)/(x1+x3);
        if(y>yp1){if(y<yp2){ind1=1;}} 
        if(y<yp1){if(y>yp2){ind1=1;}} 
        
    }}}}
    
    
 
System.out.println(ind1);
System.out.println(ind1);
0
0 / 0 / 0
Регистрация: 25.12.2013
Сообщений: 9
31.12.2013, 21:34
Вобщем для графики это особенно хорошо поэтому пишу сюда , я нашел возможность
оптимизации деления

Пусть дана пара чисел которую необходимо поделить
A и B
Необходимо вычислить A/B

многие программеры знают насколько деление может повлиять на скорость исполнения кода

Так вот задача сводится к нахождению 1/B
Задача : найти 1/B

Мы всегда можем найти в десятичной системе 1/1000 скажем простым сдвигом ничего не считая
Пусть есть некоторое 1/(B+d) = 10, 100 , 1000 или 1 0000 000 т.е. ближайшему 10 в степени
(для двоичных будет 2 в степени , 2 , 4, 8, 16 и т.д.)

обозначим это число "k"
Получим выражение 1/(B+d) = k
Скажем можна применять числа Long представляя целые как дробные
скажем 5 как 50 000 000
Точность в 7 знаков, только на 2 в степени
такие числа не будут читаться только если сдвинуть, но вот вычисляться просто таки на ура


теперь найдем что необходимо сделать с "k" чтобы получить "1/B"
получаем 1/B = 1/(1/k -d)=k/(1-d);
остается найти 1/(1-d)
есть такой ряд лорана когда d<1(Единицу при вычислениях можна представить как 2 в степени только не забываем
что если мы умножили два таких числа то их необходимо поделить на 2 в степени или если мы поднесли их в степень
то необходимо столько раз поделить на 2 в степени в какую стеень мы поднесли)

т.е. число 5 может быть представленно как 5000 скажем или 50 000

Итак ряд лорана : 1/(1+a)=1-a + a^2 -a^3+a^4...
Как видим тут только умножения и суммы да разности
причем a^4 можна получить из a^3 , a^3 из a^2 и т.д. ...

Таким образом мы находим 1/(1-d) , находим 1/B умножив его на k
Останется только произвести умножение A*(1/B)
0
0 / 0 / 0
Регистрация: 25.12.2013
Сообщений: 9
02.01.2014, 20:22
Тот ряд Лорана медленно сходится , я его преобразовал теперь сходится куда быстрее
(степень в около 2,5 раза за каждый такт)
Да и нахождение самой функции сделал попроще
дано 1/b
представляем в виде 1/(b-a+a);

число а - это ближайшее кратное 10 или 2 смотря в какой системе счисления
и которое больше нашего числа "b"
преобразуем к виду
(1/a)*( 1/( ( b-a/a) +1) )

Ряд Лорана вместе с коэфициентом 1/a запишу сразу для простоты

(1/a)*(1+ (1-b/a)+(1-b/a)^2+(1-b/a)^3...)
но я обнаружил его очень медленную сходимость поэтому преобразовал его
обозначну (1-b/a) через "k" - чтобы не переписывать его по 100 раз
(1/a)*(k+1)(1+ (k^2+1)*(k^4+1)*(k^8+1)...*k^2)

Этот ряд сходится хорошо и у меня получилось получить результат
и очень кстати точный

В качестве примера например у нас есть число
5 которое делится на 4--— > 5/4
Десятичное число до которого будем дополнять 10
k=1-b/10 = 0.6
подставим в выражение данное значение

1+(k^2+1)*(k^4+1)*(k^8+1)...*k^2
после 4 циклов программы получим
получим 1.5625...
подставим в (1+k) = 1.6
теперь все это в полную формулу
(1/a)*(1+ (1-b/a)+(1-b/a)^2+(1-b/a)^3...)
1/b = 1.6*1.5625 = 2.5
поделим на 10 , это(1/a) получим 0.25

А само деление 5/4 выполняется с помощью умножения 0,25 * 5

Вобщемто оно так и реализовано ,деление умножением

Добавлено через 8 часов 1 минуту
А вот и простенький код реализующий это
его еще поправлять и поправлять но уже реализует деление на целые положительные

Java
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package horosho;
import java.math.*;
import java.util.*;
public class horosho {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        double b=572.0000;
        double k=0.0000;
        double l=1.0000;
        long c=1;
        int s4t =0;
        
        double m1=0.0000;
        double m2=0.0000;
        double m3=0.0000;
        double m4=0.0000;
        
    while(c<b){
        c=(c<<3);
              }
    
    k=(1-b/c);
 
    
    m1= k*k;
    m2= m1*m1;
    m3= m2*m2;
    m4= m3*m3;
    
    l=(k+1)*(m1*(m1+1)*(m2+1)*(m3+1)*(m4+1)+1);
    l=l/c;
    
     System.out.println(l);
        
    
  
  
    }
 
}
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33411 / 21521 / 8236
Регистрация: 22.10.2011
Сообщений: 36,922
Записей в блоге: 12
02.01.2014, 22:21
Nfnehtdbx2, я вот понять не могу, зачем ты пишешь в раздел Visual C++ все свои коды на Java?
0
0 / 0 / 0
Регистрация: 25.12.2013
Сообщений: 9
03.01.2014, 17:14
Тут тема графики , где нашел туда и пишу
Можна и на Си переписать

Получилось , получил на лонгах деление 1/b через ряд Лорана с улучшеной сходимостью рядапосле 20 знака идет целая часть до 20 знака(где то 6 знаков после запятой) идет дробная часть
на глаз нечитабельно вычисляется на ура

для умножения функция mul
функция del для получения 1/b
Если очень хочется узнать что же это за число необходимо поделить его на 1<<20
Java
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package horosho;
import java.math.*;
import java.util.*;
public class horosho {
static  long sl(long b,long a)
    {
    long c=0;
    long k=a;
    int s4t=0;
    
    while(k!=0){
        k=(k>>1);
        s4t++;
    }
    
        
    b=(b<<s4t);
     c=a|b;
    c=(c<<(20-s4t));
     return c;
    }
 
static long mul(long a,long b)
{
    long c=0;
    c=((a*b)>>20);
    return c;
}
 
static long del(long b)
{
    
    long m1=0;
    long m2=0;
    long m3=0;
    long m4=0;
    long k=0;
    long l=0;
    long c=1048576;
    long s4t=0;
 
    
while(c<b){
    c=(c<<3);
    s4t++;
          }
 
k=((1<<20)-(b>>(3*s4t)));
 
 
m1= mul(k,k);
m2= mul(m1,m1);
m3= mul(m2,m2);
m4= mul(m3,m3);
 
l=((mul((k+(1<<20)),(mul(m1,(mul((mul((m1+(1<<20)),(m2+(1<<20)))),(mul((m3+(1<<20)),(m4+(1<<20)))))))+(1<<20))))>>(3*s4t));
    
return l;   
    
}
 
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        long a=10000;
    a=(a<<20);
    a=del(a);
    
  System.out.println(a);
    }
 
}
0
Почетный модератор
12274 / 5340 / 268
Регистрация: 05.04.2011
Сообщений: 14,086
Записей в блоге: 2
04.01.2014, 00:38
Цитата Сообщение от Nfnehtdbx2 Посмотреть сообщение
Тут тема графики , где нашел туда и пишу
Можна и на Си переписать
Не пойдет. Вот переписывайте - и публикуйте. И не нужно засорять раздел.
0
0 / 0 / 0
Регистрация: 25.12.2013
Сообщений: 9
04.01.2014, 04:00
Увидел еще одну возможность так как это число записано как целое
то в нем возможно представить 0.1 или добавить 0.1
так же как 10 можна добавить к 100 если 100 принять за единицу

Добавлено через 16 минут
десятиричные числа в двоичном целом формате
с двоичным сдвигом при вычислениях
и десятичной точкой
и все правильно, так как я этот алгоритм проверял
0
0 / 0 / 0
Регистрация: 25.12.2013
Сообщений: 9
02.06.2018, 01:03
А что если сделать чтобы наша точка стала с координатами (1 : 1)

У нас есть три уравнения такого вида если раскрыть скобки

x0y1-y0x1
x0y2-y0x2
x0y3-y0x3
все три больше/меньше нуля так вот мы берем переводим координаты остальных точек и нашей точки таким образом чтобы координаты нашей точки стали (1:1) один-один т.е. получаем три уравнения :
y1-x1
y2-x2
y3-x3
Как вам такое ?
Дальше ко всем координатам начинаем добавлять/отнимать по единичке по Х и по У сколько надо и проверять это условие
пока не переберем все точки прямоугольника в который вписан треугольник
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.06.2018, 01:03
Помогаю со студенческими работами здесь

Нужно определить попадает ли заданная точка в треугольник
Нужно определить попадает ли заданная точка в заштрихованный треугольник, границы треугольника учитываются. Желательно сделать это через...

Условный оператор: проверить, попадает ли точка с координатами X,Y в треугольник с вершинами в заданных точках
Здравствуйте! Помогите, пожалуйста написать условный оператор, проверяющий, попадат ли точка с координатами X,Y в треугольник с вершинами в...

Попадает или не попадает точка с заданными координатами в указанную область?
Необходимо решить задачу, которая при введение &quot;х&quot;, &quot;у&quot; и &quot;r&quot; говорила попадает ли точка с заданными координатами в область, закрашенную на...

Точка задана координатами.Определить попадает ли точка в заштрихованную область.
Точка задана координатами.Определить попадает ли точка в заштрихованную область.Вот рисунок к ней

Дана ограниченная область и точка A(x0, y0). Написать программу, которая проверяет, попадает ли точка с координатами пол
Дана ограниченная область и точка A(x0, y0). Написать программу, которая проверяет, попадает ли точка с координатами пользователя в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru